class Robe::Visor
Public Instance Methods
descendants(cls)
click to toggle source
# File lib/robe/visor.rb, line 11 def descendants(cls) each_object(cls.singleton_class).to_a - [cls] end
each_object(*args)
click to toggle source
# File lib/robe/visor.rb, line 7 def each_object(*args) ObjectSpace.each_object(*args).reject { |m| m.__singleton_class__? } end
resolve_const(name)
click to toggle source
# File lib/robe/visor.rb, line 29 def resolve_const(name) resolve_path(name).last end
resolve_context(name, mod)
click to toggle source
# File lib/robe/visor.rb, line 15 def resolve_context(name, mod) return resolve_const(mod) unless name unless name =~ /\A::/ nesting = mod ? mod.split("::") : [] resolve_path_elems(nesting).reverse.each do |elem| begin return elem.const_get(name) rescue NameError end end end resolve_const(name) end
resolve_path(name)
click to toggle source
# File lib/robe/visor.rb, line 33 def resolve_path(name) return [] unless name return [ARGF.class] if name == "ARGF.class" if %w(IO::readable IO::writable).include?(name) return [StringIO.included_modules.find { |m| m.name == name }] end nesting = name.split("::") nesting.shift if nesting[0].empty? resolve_path_elems(nesting) end
resolve_path_elems(nesting, init = Object)
click to toggle source
# File lib/robe/visor.rb, line 44 def resolve_path_elems(nesting, init = Object) c = init; ary = [] begin nesting.each do |name| ary << (c = c.const_get(name)) end ary rescue NameError [] end end