aboutsummaryrefslogtreecommitdiffstats
path: root/activesupport/lib/active_support/dependencies.rb
diff options
context:
space:
mode:
authorNicholas Seckar <nseckar@gmail.com>2006-08-05 22:52:15 +0000
committerNicholas Seckar <nseckar@gmail.com>2006-08-05 22:52:15 +0000
commit52d4166947d94a3648f1531239491f51cd73f2de (patch)
treec78fbaff7f9c194ba077f0f5303c4cd973973f87 /activesupport/lib/active_support/dependencies.rb
parent6ba4f4c524f73db062016701c9f93c70b08d93c0 (diff)
downloadrails-52d4166947d94a3648f1531239491f51cd73f2de.tar.gz
rails-52d4166947d94a3648f1531239491f51cd73f2de.tar.bz2
rails-52d4166947d94a3648f1531239491f51cd73f2de.zip
Raise fully qualified names upon name errors. Closes #5533.
git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@4681 5ecf4fe2-1ee6-0310-87b1-e25e094e27de
Diffstat (limited to 'activesupport/lib/active_support/dependencies.rb')
-rw-r--r--activesupport/lib/active_support/dependencies.rb18
1 files changed, 16 insertions, 2 deletions
diff --git a/activesupport/lib/active_support/dependencies.rb b/activesupport/lib/active_support/dependencies.rb
index 17ca446650..a58989173e 100644
--- a/activesupport/lib/active_support/dependencies.rb
+++ b/activesupport/lib/active_support/dependencies.rb
@@ -69,6 +69,11 @@ module Dependencies #:nodoc:
history << file_name
end
+ # Return the a constant path for the provided parent and constant name
+ def constant_path_for(mod, name)
+ ([Object, Kernel].include? mod) ? name.to_s : "#{mod}::#{name}"
+ end
+
class LoadingModule
# Old style environment.rb referenced this method directly. Please note, it doesn't
# actualy *do* anything any more.
@@ -120,7 +125,8 @@ class Module #:nodoc:
end
end
- raise NameError.new("uninitialized constant #{class_id}").copy_blame!(e)
+ qualified_name = Dependencies.constant_path_for self, class_id
+ raise NameError.new("uninitialized constant #{qualified_name}").copy_blame!(e)
end
end
end
@@ -130,7 +136,15 @@ class Class
if [Object, Kernel].include?(self) || parent == self
super
else
- parent.send :const_missing, class_id
+ begin
+ parent.send :const_missing, class_id
+ rescue NameError => e
+ # Make sure that the name we are missing is the one that caused the error
+ parent_qualified_name = Dependencies.constant_path_for parent, class_id
+ raise unless e.missing_name? parent_qualified_name
+ qualified_name = Dependencies.constant_path_for self, class_id
+ raise NameError.new("uninitialized constant #{qualified_name}").copy_blame!(e)
+ end
end
end
end