Module: Traject::QualifiedConstGet

Included in:
Indexer, Indexer, SolrJsonWriter
Defined in:
lib/traject/qualified_const_get.rb

Overview

From http://redcorundum.blogspot.com/2006/05/kernelqualifiedconstget.html Adapted into a module, rather than monkey patching it into Kernel

Method to take a string constant name, including :: qualifications, and look up the actual constant. Looks up relative to current file. Respects leading ::. Etc.

class Something
  include Traject::QualifiedConstGet

  def foo
    #...
    klass = qualified_const_get("Foo::Bar")
    #...
  end
end

Instance Method Summary collapse

Instance Method Details

#qualified_const_get(str) ⇒ Object



20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/traject/qualified_const_get.rb', line 20

def qualified_const_get(str)
  path = str.to_s.split('::')
  from_root = path[0].empty?
  if from_root
    from_root = []
    path = path[1..-1]
  else
    start_ns = ((Class === self)||(Module === self)) ? self : self.class
    from_root = start_ns.to_s.split('::')
  end
  until from_root.empty?
    begin
      return (from_root+path).inject(Object) { |ns,name| ns.const_get(name) }
    rescue NameError
      from_root.delete_at(-1)
    end
  end
  path.inject(Object) { |ns,name| ns.const_get(name) }
end