diff options
author | Prem Sichanugrist <s@sikac.hu> | 2019-06-26 19:33:22 +0900 |
---|---|---|
committer | Prem Sichanugrist <s@sikac.hu> | 2019-07-05 12:38:58 +0900 |
commit | 48c0abb4748c30adeecc17058f0220e87bcbe84a (patch) | |
tree | 4dacd4c3fc841d2037353aef36ea3733ccb61086 /activesupport/test | |
parent | fb3ecbf130e141688782bafb7da979bf0ecedf1a (diff) | |
download | rails-48c0abb4748c30adeecc17058f0220e87bcbe84a.tar.gz rails-48c0abb4748c30adeecc17058f0220e87bcbe84a.tar.bz2 rails-48c0abb4748c30adeecc17058f0220e87bcbe84a.zip |
Fix problem with accessing constant proxy subclass
This commit fixes #36313.
After #32065 moved `SourceAnnotationExtractor` into `Rails` module, it
broke the ability to access `SourceAnnotationExtractor::Annotate`
directly as user would get this error:
TypeError: Rails::SourceAnnotationExtractor is not a class/module
This commit fixes the issue by making `DeprecatedConstantProxy` to
inherit from `Module` and then defines `method_missing` and
`const_missing` to retain the previous functionality.
Thank you Matthew Draper for the idea of how to fix the issue!
[Prem Sichanugrist & Matthew Draper]
Diffstat (limited to 'activesupport/test')
-rw-r--r-- | activesupport/test/deprecation_test.rb | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/activesupport/test/deprecation_test.rb b/activesupport/test/deprecation_test.rb index f25c704586..ae2f4a6e58 100644 --- a/activesupport/test/deprecation_test.rb +++ b/activesupport/test/deprecation_test.rb @@ -38,6 +38,11 @@ class Deprecatee C = 1 end A = ActiveSupport::Deprecation::DeprecatedConstantProxy.new("Deprecatee::A", "Deprecatee::B::C") + + module New + class Descendant; end + end + Old = ActiveSupport::Deprecation::DeprecatedConstantProxy.new("Deprecatee::Old", "Deprecatee::New") end class DeprecateeWithAccessor @@ -210,6 +215,18 @@ class DeprecationTest < ActiveSupport::TestCase assert_not_deprecated { assert_equal Deprecatee::B::C.class, Deprecatee::A.class } end + def test_deprecated_constant_descendant + assert_not_deprecated { Deprecatee::New::Descendant } + + assert_deprecated("Deprecatee::Old") do + assert_equal Deprecatee::Old::Descendant, Deprecatee::New::Descendant + end + + assert_raises(NameError) do + assert_deprecated("Deprecatee::Old") { Deprecatee::Old::NON_EXISTENCE } + end + end + def test_deprecated_constant_accessor assert_not_deprecated { DeprecateeWithAccessor::B::C } assert_deprecated("DeprecateeWithAccessor::A") { assert_equal DeprecateeWithAccessor::B::C, DeprecateeWithAccessor::A } |