16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
# File 'lib/tins/deep_const_get.rb', line 16
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 ::Tins::DeepConstGet.const_defined_in?(p, c) then 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
|