From 762d1a07a77276d26f6dc660f8f413f4650a28e0 Mon Sep 17 00:00:00 2001 From: Alexander Stanko Date: Thu, 24 Feb 2011 20:10:10 +0700 Subject: [PATCH] Fix X is not missing constant Y! problem for nested modules --- activesupport/lib/active_support/dependencies.rb | 8 ++++++-- activesupport/test/dependencies_test.rb | 7 +++++++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/activesupport/lib/active_support/dependencies.rb b/activesupport/lib/active_support/dependencies.rb index dab6fdb..237f698 100644 --- a/activesupport/lib/active_support/dependencies.rb +++ b/activesupport/lib/active_support/dependencies.rb @@ -178,9 +178,13 @@ module ActiveSupport #:nodoc: # level is the one we want to report as the lookup fail. error = nil - nesting.each do |namespace| + nesting.each_with_index do |namespace, index| begin - return Dependencies.load_missing_constant Inflector.constantize(namespace), const_name + mod = Inflector.constantize(namespace) + if 0 < index and Dependencies.local_const_defined?(mod, const_name) + return mod.const_get(const_name) + end + return Dependencies.load_missing_constant mod, const_name rescue NoMethodError then raise rescue NameError => e error ||= e diff --git a/activesupport/test/dependencies_test.rb b/activesupport/test/dependencies_test.rb index bc7f597..71e1f00 100644 --- a/activesupport/test/dependencies_test.rb +++ b/activesupport/test/dependencies_test.rb @@ -743,6 +743,13 @@ class DependenciesTest < Test::Unit::TestCase end end + def test_use_already_loaded_constant_in_parent_module_instead_of_trying_to_load_it + with_autoloading_fixtures do + ModuleFolder::NestedClass::InlineClass + assert_nothing_raised{ModuleFolder::NestedClass::InlineClass} + end + end + def test_autoload_doesnt_shadow_no_method_error_with_relative_constant with_autoloading_fixtures do assert !defined?(::RaisesNoMethodError), "::RaisesNoMethodError is defined but it hasn't been referenced yet!" -- 1.7.1