mirror of
https://github.com/github/rails.git
synced 2026-01-29 00:08:15 -05:00
JRuby: improve constantize performance. [#410 state:resolved]
This commit is contained in:
@@ -291,11 +291,14 @@ module ActiveSupport
|
||||
# NameError is raised when the name is not in CamelCase or the constant is
|
||||
# unknown.
|
||||
def constantize(camel_cased_word)
|
||||
unless /\A(?:::)?([A-Z]\w*(?:::[A-Z]\w*)*)\z/ =~ camel_cased_word
|
||||
raise NameError, "#{camel_cased_word.inspect} is not a valid constant name!"
|
||||
end
|
||||
names = camel_cased_word.split('::')
|
||||
names.shift if names.empty? || names.first.empty?
|
||||
|
||||
Object.module_eval("::#{$1}", __FILE__, __LINE__)
|
||||
constant = Object
|
||||
names.each do |name|
|
||||
constant = constant.const_defined?(name) ? constant.const_get(name) : constant.const_missing(name)
|
||||
end
|
||||
constant
|
||||
end
|
||||
|
||||
# Turns a number into an ordinal string used to denote the position in an
|
||||
@@ -326,4 +329,4 @@ require 'active_support/inflections'
|
||||
require 'active_support/core_ext/string/inflections'
|
||||
unless String.included_modules.include?(ActiveSupport::CoreExtensions::String::Inflections)
|
||||
String.send :include, ActiveSupport::CoreExtensions::String::Inflections
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user