Skip to content

Commit

Permalink
moves reopening of core classes to add generic stuff from Action Pack…
Browse files Browse the repository at this point in the history
… to AS/core_ext and adds tests

[#2798 state:committed]

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
  • Loading branch information
fxn authored and jeremy committed Jun 13, 2009
1 parent 9eeb5fe commit b56169c
Show file tree
Hide file tree
Showing 10 changed files with 93 additions and 49 deletions.
53 changes: 4 additions & 49 deletions actionpack/lib/action_controller/routing/routing_ext.rb
@@ -1,49 +1,4 @@
class Object require 'active_support/core_ext/object/conversions'
def to_param require 'active_support/core_ext/boolean/conversions'
to_s require 'active_support/core_ext/nil/conversions'
end require 'active_support/core_ext/regexp'
end

class TrueClass
def to_param
self
end
end

class FalseClass
def to_param
self
end
end

class NilClass
def to_param
self
end
end

class Regexp #:nodoc:
def number_of_captures
Regexp.new("|#{source}").match('').captures.length
end

def multiline?
options & MULTILINE == MULTILINE
end

class << self
def optionalize(pattern)
case unoptionalize(pattern)
when /\A(.|\(.*\))\Z/ then "#{pattern}?"
else "(?:#{pattern})?"
end
end

def unoptionalize(pattern)
[/\A\(\?:(.*)\)\?\Z/, /\A(.|\(.*\))\?\Z/].each do |regexp|
return $1 if regexp =~ pattern
end
return pattern
end
end
end
1 change: 1 addition & 0 deletions activesupport/lib/active_support/core_ext/boolean.rb
@@ -0,0 +1 @@
require 'active_support/core_ext/boolean/conversions'
11 changes: 11 additions & 0 deletions activesupport/lib/active_support/core_ext/boolean/conversions.rb
@@ -0,0 +1,11 @@
class TrueClass
def to_param
self
end
end

class FalseClass
def to_param
self
end
end
1 change: 1 addition & 0 deletions activesupport/lib/active_support/core_ext/nil.rb
@@ -0,0 +1 @@
require 'active_support/core_ext/nil/conversions'
5 changes: 5 additions & 0 deletions activesupport/lib/active_support/core_ext/nil/conversions.rb
@@ -0,0 +1,5 @@
class NilClass
def to_param
self
end
end
25 changes: 25 additions & 0 deletions activesupport/lib/active_support/core_ext/regexp.rb
@@ -0,0 +1,25 @@
class Regexp #:nodoc:
def number_of_captures
Regexp.new("|#{source}").match('').captures.length
end

def multiline?
options & MULTILINE == MULTILINE
end

class << self
def optionalize(pattern)
case unoptionalize(pattern)
when /\A(.|\(.*\))\Z/ then "#{pattern}?"
else "(?:#{pattern})?"
end
end

def unoptionalize(pattern)
[/\A\(\?:(.*)\)\?\Z/, /\A(.|\(.*\))\?\Z/].each do |regexp|
return $1 if regexp =~ pattern
end
return pattern
end
end
end
9 changes: 9 additions & 0 deletions activesupport/test/core_ext/boolean_ext_test.rb
@@ -0,0 +1,9 @@
class BooleanExtAccessTests < Test::Unit::TestCase
def test_to_param_on_true
assert_equal true, true.to_param
end

def test_to_param_on_false
assert_equal false, false.to_param
end
end
5 changes: 5 additions & 0 deletions activesupport/test/core_ext/nil_ext_test.rb
@@ -0,0 +1,5 @@
class NilExtAccessTests < Test::Unit::TestCase
def test_to_param
assert_nil nil.to_param
end
end
6 changes: 6 additions & 0 deletions activesupport/test/core_ext/object_ext_test.rb
Expand Up @@ -5,4 +5,10 @@ def test_tap_yields_and_returns_self
foo = Object.new foo = Object.new
assert_equal foo, foo.tap { |x| assert_equal foo, x; :bar } assert_equal foo, foo.tap { |x| assert_equal foo, x; :bar }
end end

def test_to_param
foo = Object.new
foo.class_eval("def to_s; 'foo'; end")
assert_equal 'foo', foo.to_param
end
end end
26 changes: 26 additions & 0 deletions activesupport/test/core_ext/regexp_ext_test.rb
@@ -0,0 +1,26 @@
class RegexpExtAccessTests < Test::Unit::TestCase
def test_number_of_captures
assert_equal 0, //.number_of_captures
assert_equal 1, /.(.)./.number_of_captures
assert_equal 2, /.(.).(?:.).(.)/.number_of_captures
assert_equal 3, /.((.).(?:.).(.))/.number_of_captures
end

def test_multiline
assert //m.multiline?
assert ! //.multiline?
assert ! /(?m:)/.multiline?
end

def test_optionalize
assert "a?", Regexp.optionalize("a")
assert "(?:foo)?", Regexp.optionalize("foo")
assert "", Regexp.optionalize("")
end

def test_unoptionalize
assert "a", Regexp.unoptionalize("a?")
assert "foo", Regexp.unoptionalize("(?:foo)")
assert "", Regexp.unoptionalize("")
end
end

1 comment on commit b56169c

@jviney
Copy link
Contributor

@jviney jviney commented on b56169c Jun 14, 2009

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

RegexpExtAccessTests#test_optionalize and #test_unoptionalize should be using assert_equals, not assert.

Please sign in to comment.