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:
parent
35ae42be4f
commit
fd1a504136
4 changed files with 26 additions and 14 deletions
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue