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