diff options
| -rw-r--r-- | activesupport/lib/active_support/inflector/methods.rb | 2 | ||||
| -rw-r--r-- | activesupport/test/constantize_test_cases.rb | 18 | 
2 files changed, 19 insertions, 1 deletions
| diff --git a/activesupport/lib/active_support/inflector/methods.rb b/activesupport/lib/active_support/inflector/methods.rb index 274dc90eff..11f3c4c46f 100644 --- a/activesupport/lib/active_support/inflector/methods.rb +++ b/activesupport/lib/active_support/inflector/methods.rb @@ -204,7 +204,7 @@ module ActiveSupport        names.inject(Object) do |constant, name|          candidate = constant.const_get(name) -        if constant.const_defined?(name, false) || !Object.const_defined?(name) +        if constant.const_defined?(name, false) || constant == Object || !Object.const_defined?(name)            candidate          else            # Go down the ancestors to check it it's owned diff --git a/activesupport/test/constantize_test_cases.rb b/activesupport/test/constantize_test_cases.rb index 908f9e9a37..470213e9bd 100644 --- a/activesupport/test/constantize_test_cases.rb +++ b/activesupport/test/constantize_test_cases.rb @@ -12,6 +12,16 @@ module Ace    end  end +class Object +  module AddtlGlobalConstants +    class Case +      class Dice +      end +    end +  end +  include AddtlGlobalConstants +end +  module ConstantizeTestCases    def run_constantize_tests_on      assert_nothing_raised { assert_equal Ace::Base::Case, yield("Ace::Base::Case") } @@ -19,8 +29,12 @@ module ConstantizeTestCases      assert_nothing_raised { assert_equal Ace::Base::Case::Dice, yield("Ace::Base::Case::Dice") }      assert_nothing_raised { assert_equal Ace::Base::Fase::Dice, yield("Ace::Base::Fase::Dice") }      assert_nothing_raised { assert_equal Ace::Gas::Case, yield("Ace::Gas::Case") } +    assert_nothing_raised { assert_equal Case::Dice, yield("Case::Dice") } +    assert_nothing_raised { assert_equal Case::Dice, yield("Object::Case::Dice") }      assert_nothing_raised { assert_equal ConstantizeTestCases, yield("ConstantizeTestCases") }      assert_nothing_raised { assert_equal ConstantizeTestCases, yield("::ConstantizeTestCases") } +    assert_nothing_raised { assert_equal Object, yield("") } +    assert_nothing_raised { assert_equal Object, yield("::") }      assert_raise(NameError) { yield("UnknownClass") }      assert_raise(NameError) { yield("UnknownClass::Ace") }      assert_raise(NameError) { yield("UnknownClass::Ace::Base") } @@ -38,8 +52,12 @@ module ConstantizeTestCases      assert_nothing_raised { assert_equal Ace::Base::Case::Dice, yield("Ace::Base::Case::Dice") }      assert_nothing_raised { assert_equal Ace::Base::Fase::Dice, yield("Ace::Base::Fase::Dice") }      assert_nothing_raised { assert_equal Ace::Gas::Case, yield("Ace::Gas::Case") } +    assert_nothing_raised { assert_equal Case::Dice, yield("Case::Dice") } +    assert_nothing_raised { assert_equal Case::Dice, yield("Object::Case::Dice") }      assert_nothing_raised { assert_equal ConstantizeTestCases, yield("ConstantizeTestCases") }      assert_nothing_raised { assert_equal ConstantizeTestCases, yield("::ConstantizeTestCases") } +    assert_nothing_raised { assert_equal Object, yield("") } +    assert_nothing_raised { assert_equal Object, yield("::") }      assert_nothing_raised { assert_equal nil, yield("UnknownClass") }      assert_nothing_raised { assert_equal nil, yield("UnknownClass::Ace") }      assert_nothing_raised { assert_equal nil, yield("UnknownClass::Ace::Base") } | 
