aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Heinemeier Hansson <david@loudthinking.com>2005-01-24 00:30:15 +0000
committerDavid Heinemeier Hansson <david@loudthinking.com>2005-01-24 00:30:15 +0000
commit25eaf062c2b2c19025d85da1d6fb667afc63a642 (patch)
tree5071a610ce5e3920e56a690cdaac618a8d4e5833
parentf31291ab5a5d928f7f73f32fa9f2261c1f446476 (diff)
downloadrails-25eaf062c2b2c19025d85da1d6fb667afc63a642.tar.gz
rails-25eaf062c2b2c19025d85da1d6fb667afc63a642.tar.bz2
rails-25eaf062c2b2c19025d85da1d6fb667afc63a642.zip
Another swing at reloading
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@480 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
-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