aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--activesupport/lib/dependencies.rb37
1 files changed, 18 insertions, 19 deletions
diff --git a/activesupport/lib/dependencies.rb b/activesupport/lib/dependencies.rb
index 4f4dfa4a71..38197bff6d 100644
--- a/activesupport/lib/dependencies.rb
+++ b/activesupport/lib/dependencies.rb
@@ -11,10 +11,9 @@ module Dependencies
def depend_on(file_name, swallow_load_errors = false)
if !loaded.include?(file_name)
- loaded << file_name
-
begin
require_or_load(file_name)
+ loaded << file_name
rescue LoadError
raise unless swallow_load_errors
end
@@ -30,17 +29,21 @@ module Dependencies
end
def reload
- old_loaded = loaded.dup
- clear
- old_loaded.each { |file_name| depend_on(file_name, true) }
+ loaded.each do |file_name|
+ begin
+ silence_warnings { load("#{file_name}.rb") }
+ rescue LoadError
+ # We don't care if the file was removed now
+ end
+ end
end
- private
- def require_or_load(file_name)
- mechanism == :load ? silence_warnings { load("#{file_name}.rb") } : require(file_name)
- end
+ def require_or_load(file_name)
+ mechanism == :load ? silence_warnings { load("#{file_name}.rb") } : require(file_name)
+ end
end
+Object.send(:define_method, :require_or_load) { |file_name| Dependencies.require_or_load(file_name) } unless Object.respond_to?(:require_or_load)
Object.send(:define_method, :require_dependency) { |file_name| Dependencies.depend_on(file_name) } unless Object.respond_to?(:require_dependency)
Object.send(:define_method, :require_association) { |file_name| Dependencies.associate_with(file_name) } unless Object.respond_to?(:require_association)
@@ -48,16 +51,12 @@ class Object #:nodoc:
class << self
# Use const_missing to autoload associations so we don't have to
# require_association when using single-table inheritance.
- unless respond_to?(:pre_dependency_const_missing)
- alias_method :pre_dependency_const_missing, :const_missing
-
- def const_missing(class_id)
- begin
- require_dependency(Inflector.underscore(Inflector.demodulize(class_id.to_s)))
- return Object.const_get(class_id) if Object.const_defined?(class_id)
- rescue LoadError
- pre_dependency_const_missing(class_id)
- end
+ def const_missing(class_id)
+ begin
+ require_dependency(Inflector.underscore(Inflector.demodulize(class_id.to_s)))
+ if Object.const_defined?(class_id) then return Object.const_get(class_id) else raise LoadError end
+ rescue LoadError
+ raise NameError, "uninitialized constant #{class_id}"
end
end
end