Module: Tins::DeepConstGet

Extended by:
Deprecate
Defined in:
lib/tins/deep_const_get.rb

Instance Method Summary collapse

Methods included from Deprecate

deprecate

Instance Method Details

#const_defined_in?(modul, constant) ⇒ Boolean

:nocov: We do not create coverage on 1.8

Returns:

  • (Boolean)


9
10
11
# File 'lib/tins/deep_const_get.rb', line 9

def const_defined_in?(modul, constant)
  modul.const_defined?(constant)
end

#deep_const_get(path, start_module = Object) ⇒ Object



25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/tins/deep_const_get.rb', line 25

def deep_const_get(path, start_module = Object)
  path.to_s.split('::').inject(start_module) do |p, c|
    case
    when c.empty?
      if start_module == Object
        Object
      else
        raise ArgumentError, "top level constants cannot be reached from"\
          " start module #{start_module.inspect}"
      end
    when const_defined_in?(p, c)
      p.const_get(c)
    else
      begin
        p.const_missing(c)
      rescue NameError => e
        raise ArgumentError, "can't get const #{path}: #{e}"
      end
    end
  end
end