mirror of
https://github.com/github/rails.git
synced 2026-04-26 03:00:59 -04:00
Change Inflector#constantize to use eval instead of const_get
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@3049 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
This commit is contained in:
@@ -1,5 +1,7 @@
|
||||
*1.2.3* (November 7th, 2005)
|
||||
|
||||
* Change Inflector#constantize to use eval instead of const_get. [Nicholas Seckar]
|
||||
|
||||
* Fix const_missing handler to ignore the trailing '.rb' on files when comparing paths. [Nicholas Seckar]
|
||||
|
||||
* Define kernel.rb methods in "class Object" instead of "module Kernel" to work around a Windows peculiarity [Sam Stephenson]
|
||||
|
||||
@@ -142,9 +142,11 @@ module Inflector
|
||||
end
|
||||
|
||||
def constantize(camel_cased_word)
|
||||
camel_cased_word.split("::").inject(Object) do |final_type, part|
|
||||
final_type = final_type.const_get(part)
|
||||
end
|
||||
raise NameError, "#{camel_cased_word.inspect} is not a valid constant name!" unless
|
||||
camel_cased_word.split("::").all? { |part| /^[A-Z]\w*$/ =~ part }
|
||||
|
||||
camel_cased_word = "::#{camel_cased_word}" unless camel_cased_word[0, 2] == '::'
|
||||
Object.module_eval(camel_cased_word, __FILE__, __LINE__)
|
||||
end
|
||||
|
||||
def ordinalize(number)
|
||||
|
||||
@@ -276,6 +276,11 @@ class InflectorTest < Test::Unit::TestCase
|
||||
assert_equal Ace::Base::Case, Inflector.constantize("Ace::Base::Case")
|
||||
assert_equal InflectorTest, Inflector.constantize("InflectorTest")
|
||||
assert_raises(NameError) { Inflector.constantize("UnknownClass") }
|
||||
assert_raises(NameError) { Inflector.constantize("An invalid string") }
|
||||
end
|
||||
|
||||
def test_constantize_doesnt_look_in_parent
|
||||
assert_raises(NameError) { Inflector.constantize("Ace::Base::InflectorTest") }
|
||||
end
|
||||
|
||||
def test_ordinal
|
||||
|
||||
Reference in New Issue
Block a user