Class Module
In: lib/extlib/module.rb
Parent: Object
Module dot/f_13.png

Methods

Public Instance methods

[Source]

   # File lib/extlib/module.rb, line 2
2:   def find_const(const_name)
3:     if const_name[0..1] == '::'
4:       Object.find_const(const_name[2..-1])
5:     else
6:       nested_const_lookup(const_name)
7:     end
8:   end

[Source]

    # File lib/extlib/module.rb, line 10
10:   def try_dup
11:     self
12:   end

Private Instance methods

Doesn‘t do any caching since constants can change with remove_const

[Source]

    # File lib/extlib/module.rb, line 17
17:   def nested_const_lookup(const_name)
18:     constants = [ Object ]
19: 
20:     unless self == Object
21:       self.name.split('::').each do |part|
22:         constants.unshift(constants.first.const_get(part))
23:       end
24:     end
25: 
26:     parts = const_name.split('::')
27: 
28:     # from most to least specific constant, use each as a base and try
29:     # to find a constant with the name const_name within them
30:     constants.each do |const|
31:       # return the nested constant if available
32:       return const if parts.all? do |part|
33:         const = if RUBY_VERSION >= '1.9.0'
34:           const.const_defined?(part, false) ? const.const_get(part, false) : nil
35:         else
36:           const.const_defined?(part) ? const.const_get(part) : nil
37:         end
38:       end
39:     end
40: 
41:     # if we get this far then the nested constant was not found
42:     raise NameError, "uninitialized constant #{const_name}"
43:   end

[Validate]