Class: String
- Inherits:
-
Object
- Object
- String
- Defined in:
- lib/jrubyfx-fxmlloader.rb
Direct Known Subclasses
Instance Method Summary collapse
-
#constantize_by(splitter = "::") ⇒ Object
steal handy methods from activesupport Tries to find a constant with the name specified in the argument string.
Instance Method Details
#constantize_by(splitter = "::") ⇒ Object
steal handy methods from activesupport Tries to find a constant with the name specified in the argument string.
‘Module’.constantize # => Module ‘Test::Unit’.constantize # => Test::Unit
The name is assumed to be the one of a top-level constant, no matter whether it starts with “::” or not. No lexical context is taken into account:
C = ‘outside’ module M C = ‘inside’ C # => ‘inside’ ‘C’.constantize # => ‘outside’, same as ::C end
NameError is raised when the name is not in CamelCase or the constant is unknown.
765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 |
# File 'lib/jrubyfx-fxmlloader.rb', line 765 def constantize_by(splitter="::") camel_cased_word = self names = camel_cased_word.split(splitter) names.shift if names.empty? || names.first.empty? names.inject(Object) do |constant, name| if constant == Object constant.const_get(name) else candidate = constant.const_get(name) next candidate if constant.const_defined?(name, false) next candidate unless Object.const_defined?(name) # Go down the ancestors to check it it's owned # directly before we reach Object or the end of ancestors. constant = constant.ancestors.inject do |const, ancestor| break const if ancestor == Object break ancestor if ancestor.const_defined?(name, false) const end # owner is in Object, so raise constant.const_get(name, false) end end end |