Skip to content
Browse files

Merge pull request #13977 from Octember/master

Fixed an issue where reloading of removed dependencies would cause an un...
  • Loading branch information...
2 parents 3c2fe5c + 4fa8c8b commit 3c8e0a47f942e435208b69d90a95eb8c6cea8cf9 @tenderlove tenderlove committed
Showing with 20 additions and 0 deletions.
  1. +8 −0 activesupport/lib/active_support/dependencies.rb
  2. +12 −0 activesupport/test/dependencies_test.rb
View
8 activesupport/lib/active_support/dependencies.rb
@@ -665,6 +665,14 @@ def remove_constant(const) #:nodoc:
constants = normalized.split('::')
to_remove = constants.pop
+ # Remove the file path from the loaded list.
+ file_path = search_for_file(const.underscore)
+ if file_path
+ expanded = File.expand_path(file_path)
+ expanded.sub!(/\.rb\z/, '')
+ self.loaded.delete(expanded)
+ end
+
if constants.empty?
parent = Object
else
View
12 activesupport/test/dependencies_test.rb
@@ -948,6 +948,18 @@ def test_load_once_constants_should_not_be_unloaded
Object.class_eval { remove_const :A if const_defined?(:A) }
end
+ def test_access_unloaded_constants_for_reload
+ with_autoloading_fixtures do
+ assert_kind_of Module, A
+ assert_kind_of Class, A::B # Necessary to load A::B for the test
+ ActiveSupport::Dependencies.mark_for_unload(A::B)
+ ActiveSupport::Dependencies.remove_unloadable_constants!
+
+ A::B # Make sure no circular dependency error
+ end
+ end
+
+
def test_autoload_once_paths_should_behave_when_recursively_loading
with_loading 'dependencies', 'autoloading_fixtures' do
ActiveSupport::Dependencies.autoload_once_paths = [ActiveSupport::Dependencies.autoload_paths.last]

0 comments on commit 3c8e0a4

Please sign in to comment.
Something went wrong with that request. Please try again.