Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Only track new constant definitions when we're reloading dependencies

  • Loading branch information...
commit cbb38bbdba0f7cfb628a0f8716e79d0d079fd7bf 1 parent 278b6cd
@jeremy jeremy authored
View
12 activesupport/lib/active_support/dependencies.rb
@@ -138,14 +138,22 @@ def require_association(file_name)
end
def load_with_new_constant_marking(file, *extras) #:nodoc:
- Dependencies.new_constants_in(Object) { load_without_new_constant_marking(file, *extras) }
+ if Dependencies.load?
+ Dependencies.new_constants_in(Object) { load_without_new_constant_marking(file, *extras) }
+ else
+ load_without_new_constant_marking(file, *extras)
+ end
rescue Exception => exception # errors from loading file
exception.blame_file! file
raise
end
def require(file, *extras) #:nodoc:
- Dependencies.new_constants_in(Object) { super }
+ if Dependencies.load?
+ Dependencies.new_constants_in(Object) { super }
+ else
+ super
+ end
rescue Exception => exception # errors from required file
exception.blame_file! file
raise
View
10 activesupport/test/dependencies_test.rb
@@ -694,17 +694,17 @@ def test_autoload_doesnt_shadow_error_when_mechanism_not_set_to_load
with_loading 'autoloading_fixtures' do
ActiveSupport::Dependencies.mechanism = :require
2.times do
- assert_raise(NameError) {"RaisesNameError".constantize}
+ assert_raise(NameError) { assert_equal 123, ::RaisesNameError::FooBarBaz }
end
end
end
def test_autoload_doesnt_shadow_name_error
with_loading 'autoloading_fixtures' do
- assert !defined?(::RaisesNameError), "::RaisesNameError is defined but it hasn't been referenced yet!"
+ Object.send(:remove_const, :RaisesNameError) if defined?(::RaisesNameError)
2.times do
begin
- ::RaisesNameError.object_id
+ ::RaisesNameError::FooBarBaz.object_id
flunk 'should have raised NameError when autoloaded file referenced FooBarBaz'
rescue NameError => e
assert_equal 'uninitialized constant RaisesNameError::FooBarBaz', e.message
@@ -712,9 +712,9 @@ def test_autoload_doesnt_shadow_name_error
assert !defined?(::RaisesNameError), "::RaisesNameError is defined but it should have failed!"
end
- assert !defined?(RaisesNameError)
+ assert !defined?(::RaisesNameError)
2.times do
- assert_raise(NameError) { RaisesNameError }
+ assert_raise(NameError) { ::RaisesNameError }
assert !defined?(::RaisesNameError), "::RaisesNameError is defined but it should have failed!"
end
end
Please sign in to comment.
Something went wrong with that request. Please try again.