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

ActiveSupport::Dependencies.constantize shortcut for caching named constant lookups

This commit is contained in:
Jeremy Kemper 2010-06-05 20:33:53 -07:00
parent 35ae42be4f
commit fd1a504136
4 changed files with 26 additions and 14 deletions

View file

@ -47,4 +47,15 @@ class String
d[5] += d.pop
::DateTime.civil(*d)
end
# +constantize+ tries to find a declared constant with the name specified
# in the string. It raises a NameError when the name is not in CamelCase
# or is not initialized.
#
# Examples
# "Module".constantize # => Module
# "Class".constantize # => Class
def constantize
ActiveSupport::Inflector.constantize(self)
end
end

View file

@ -146,15 +146,4 @@ class String
def foreign_key(separate_class_name_and_id_with_underscore = true)
ActiveSupport::Inflector.foreign_key(self, separate_class_name_and_id_with_underscore)
end
# +constantize+ tries to find a declared constant with the name specified
# in the string. It raises a NameError when the name is not in CamelCase
# or is not initialized.
#
# Examples
# "Module".constantize # => Module
# "Class".constantize # => Class
def constantize
ActiveSupport::Inflector.constantize(self)
end
end

View file

@ -484,8 +484,10 @@ module ActiveSupport #:nodoc:
end
class Reference
def initialize(constant, name)
@constant, @name = constant, name
attr_reader :name
def initialize(name, constant = nil)
@name, @constant = name, constant
end
def get
@ -498,7 +500,11 @@ module ActiveSupport #:nodoc:
end
def ref(name)
references[name] ||= Reference.new(Inflector.constantize(name), name)
references[name] ||= Reference.new(name)
end
def constantize(name)
ref(name).get
end
# Determine if the given constant has been automatically loaded.

View file

@ -446,6 +446,12 @@ class DependenciesTest < Test::Unit::TestCase
end
end
def test_constantize_shortcut_for_cached_constant_lookups
with_loading 'dependencies' do
assert_equal ServiceOne, ActiveSupport::Dependencies.constantize("ServiceOne")
end
end
def test_nested_load_error_isnt_rescued
with_loading 'dependencies' do
assert_raise(MissingSourceFile) do