1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00

Detect missing_constants calls from removed modules and fail accordingly.

git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@4780 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
This commit is contained in:
Nicholas Seckar 2006-08-17 03:35:36 +00:00
parent 2b37d59976
commit 924ef18d4b
3 changed files with 21 additions and 0 deletions

View file

@ -1,5 +1,7 @@
*SVN*
* Detect missing_constants calls from removed modules and fail accordingly. [Nicholas Seckar]
* Stop using defined? in Dependencies.qualified_const_defined? since defined? may invoke const_missing. [Nicholas Seckar]
* Dependencies can autoload directories of nested classes. [Jeremy Kemper]

View file

@ -182,6 +182,10 @@ module Dependencies #:nodoc:
# If we have an anonymous module, all we can do is attempt to load from Object.
from_mod = Object if from_mod.name.empty?
unless qualified_const_defined?(from_mod.name) && from_mod.name.constantize.object_id == from_mod.object_id
raise ArgumentError, "A copy of #{from_mod} has been removed from the module tree but is still active!"
end
raise ArgumentError, "Expected #{from_mod} is not missing constant #{const_name}!" if from_mod.const_defined?(const_name)
qualified_name = qualified_name_for from_mod, const_name

View file

@ -372,4 +372,19 @@ class DependenciesTest < Test::Unit::TestCase
end
end
def test_removal_from_tree_should_be_detected
with_loading 'dependencies' do
root = Dependencies.autoload_paths.first
c = ServiceOne
Dependencies.clear
assert ! defined?(ServiceOne)
begin
Dependencies.load_missing_constant(c, :FakeMissing)
flunk "Expected exception"
rescue ArgumentError => e
assert_match %r{ServiceOne has been removed from the module tree}i, e.message
end
end
end
end