lib/tree_graph.rb in tree_graph-0.2.0 vs lib/tree_graph.rb in tree_graph-0.2.1
- old
+ new
@@ -1,59 +1,82 @@
require "tree_graph/version"
module TreeGraph
def tree_graph
- Node.new(self).tree_graph
+ TopDown.new(self).tree_graph
end
- class Node
+ def tree_graph_bottom_up
+ BottomUp.new(self).tree_graph
+ end
+ module Node
+
attr_accessor :is_last
attr_reader :raw_node, :parent
def initialize raw_node, parent=nil
@raw_node, @parent, @is_last = raw_node, parent, false
end
- def tree_graph
- ([level] +
- children_nodes.map(&:tree_graph)
- ).join("\n")
- end
-
def children_nodes
children = []
raw_node.children_for_tree_graph.each do |c|
- children << Node.new(c, self)
+ children << self.class.new(c, self)
end
return children if children.empty?
children.last.is_last = true
children
end
def level
[indent, branch, raw_node.label_for_tree_graph].join
end
+ def levels
+ [level] + children_nodes.map(&:tree_graph)
+ end
+
def ancestors
return [] unless parent
parent.ancestors + [parent]
end
- def branch
- return '' unless parent
- is_last ? '└─' : '├─'
- end
-
def indent
ancestors.map do |a|
unless a.parent
''
else
a.is_last ? ' ' : '│ '
end
end.join
end
+ end
+
+ class TopDown
+ include Node
+
+ def tree_graph
+ levels.join("\n")
+ end
+
+ def branch
+ return '' unless parent
+ is_last ? '└─' : '├─'
+ end
+ end
+
+ class BottomUp
+ include Node
+
+ def tree_graph
+ levels.reverse.join("\n")
+ end
+
+ def branch
+ return '' unless parent
+ is_last ? '┌─' : '├─'
+ end
end
end