The following example fails
class A
class B
end
end
p Object.const_get \'A\' # => A
p Object.const_get \'A::B\' # => NameError: wrong constant name A::
Here is Rails' constantize
method:
def constantize(camel_cased_word)
names = camel_cased_word.split('::')
names.shift if names.empty? || names.first.empty?
constant = Object
names.each do |name|
constant = constant.const_defined?(name) ? constant.const_get(name) : constant.const_missing(name)
end
constant
end
See, it starts at the Object
on top of it all, then uses each name in between the double semicolons as a stepping stone to get to the constant you want.