Sha256: c6bd53cba71e1b83605669128de884482a4e736f3a2933ab861412fdf92f1226
Contents?: true
Size: 1.41 KB
Versions: 1
Compression:
Stored size: 1.41 KB
Contents
module Constree Node = Struct.new :constant, :name, :parent, :is_last do attr_accessor :ref def sub_nodes return [] unless constant.is_a? Module names = constant.constants names.reduce([]) do |nodes, name| nodes << Node.new(constant.const_get(name), name, self, nodes.count == names.count - 1) end end def ancestors return [] unless parent p, anc = parent, [] while p anc.unshift p p = p.parent end anc end def last? is_last ? true : false end def top? parent ? false : true end def branch return '' unless parent last? ? '└─' : '├─' end def indent ancestors.map do |a| if a.top? '' else a.last? ? ' ' : '│ ' end end.join end def level indent + branch + display_name + ' ' + type end def display_name (name || constant.name).to_s end def full_name top? ? constant.name : "#{parent.full_name}::#{name}" end def == other return false unless other.is_a? Node constant == other.constant end def type ref ? "→ #{ref.full_name}" : "(#{constant.class.to_s})" end def not_yet? seen i = seen.find_index self if i == seen.count - 1 true else self.ref = seen[i] false end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
constree-0.1.0 | lib/constree/node.rb |