Class: ConstLookup
- Inherits:
-
Object
- Object
- ConstLookup
- Defined in:
- lib/const_lookup.rb,
lib/const_lookup/version.rb,
lib/const_lookup/core_ext.rb
Defined Under Namespace
Modules: CoreExt
Constant Summary collapse
- VERSION =
'0.6.0'.freeze
Class Method Summary collapse
Instance Method Summary collapse
-
#initialize(namespace) ⇒ ConstLookup
constructor
A new instance of ConstLookup.
- #lookup(name) ⇒ Object
- #lookup_path ⇒ Object
Constructor Details
#initialize(namespace) ⇒ ConstLookup
Returns a new instance of ConstLookup.
8 9 10 11 |
# File 'lib/const_lookup.rb', line 8 def initialize namespace raise ArgumentError, 'namespace must be a Module' unless namespace.is_a? Module @namespace = namespace.to_s end |
Class Method Details
.lookup(name, namespace = Object) ⇒ Object
4 5 6 |
# File 'lib/const_lookup.rb', line 4 def self.lookup name, namespace = Object new(namespace).lookup(name) end |
Instance Method Details
#lookup(name) ⇒ Object
13 14 15 16 17 18 19 20 21 22 23 |
# File 'lib/const_lookup.rb', line 13 def lookup name name = name.to_sym constant = lookup_path.select do |namespace| namespace.const_defined? name end.map do |namespace| namespace.const_get name end.sort_by do |constant| -constant.to_s.split('::').size end.first constant or raise NameError, "Failed to find `#{name}' in #@namespace" end |
#lookup_path ⇒ Object
25 26 27 28 29 30 31 32 33 |
# File 'lib/const_lookup.rb', line 25 def lookup_path @namespace.split('::').reduce([]) do |lookup_path, part| lookup_path << [*lookup_path.last, part] end.map do |parts| parts.join '::' end.map do |name| namespaced_const_get name end.reverse end |