1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00

moves reopening of core classes to add generic stuff from Action Pack to AS/core_ext and adds tests

[#2798 state:committed]

Signed-off-by: Jeremy Kemper <jeremy@bitsweat.net>
This commit is contained in:
Xavier Noria 2009-06-13 12:46:09 +02:00 committed by Jeremy Kemper
parent 9eeb5fed2f
commit b56169c262
10 changed files with 93 additions and 49 deletions

View file

@ -1,49 +1,4 @@
class Object
def to_param
to_s
end
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
require 'active_support/core_ext/object/conversions'
require 'active_support/core_ext/boolean/conversions'
require 'active_support/core_ext/nil/conversions'
require 'active_support/core_ext/regexp'

View file

@ -0,0 +1 @@
require 'active_support/core_ext/boolean/conversions'

View file

@ -0,0 +1,11 @@
class TrueClass
def to_param
self
end
end
class FalseClass
def to_param
self
end
end

View file

@ -0,0 +1 @@
require 'active_support/core_ext/nil/conversions'

View file

@ -0,0 +1,5 @@
class NilClass
def to_param
self
end
end

View file

@ -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

View file

@ -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

View file

@ -0,0 +1,5 @@
class NilExtAccessTests < Test::Unit::TestCase
def test_to_param
assert_nil nil.to_param
end
end

View file

@ -5,4 +5,10 @@ class ObjectExtTest < Test::Unit::TestCase
foo = Object.new
assert_equal foo, foo.tap { |x| assert_equal foo, x; :bar }
end
def test_to_param
foo = Object.new
foo.class_eval("def to_s; 'foo'; end")
assert_equal 'foo', foo.to_param
end
end

View file

@ -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