提交 ed8a882e 编写于 作者: J Jeremy Kemper

JRuby: improve constantize performance. [#410 state:resolved]

上级 f5bcbde1
......@@ -291,11 +291,14 @@ def foreign_key(class_name, separate_class_name_and_id_with_underscore = true)
# 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 @@ def ordinalize(number)
require 'active_support/core_ext/string/inflections'
unless String.included_modules.include?(ActiveSupport::CoreExtensions::String::Inflections)
String.send :include, ActiveSupport::CoreExtensions::String::Inflections
end
\ No newline at end of file
end
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册