Class: TreeDiff::DotVisitor
- Inherits:
-
Object
- Object
- TreeDiff::DotVisitor
- Defined in:
- lib/tree_diff/dot_visitor.rb
Constant Summary collapse
- COLORS =
{ 1 => 'blue', 2 => 'red', 3 => 'green', }
Instance Method Summary collapse
- #accept(target) ⇒ Object
-
#initialize(root) ⇒ DotVisitor
constructor
A new instance of DotVisitor.
- #to_s ⇒ Object
- #visit(node) ⇒ Object
Constructor Details
#initialize(root) ⇒ DotVisitor
Returns a new instance of DotVisitor.
9 10 11 12 13 |
# File 'lib/tree_diff/dot_visitor.rb', line 9 def initialize root @root = root @nodes = [] @edges = [] end |
Instance Method Details
#accept(target) ⇒ Object
15 16 17 |
# File 'lib/tree_diff/dot_visitor.rb', line 15 def accept target target.accept(self) end |
#to_s ⇒ Object
47 48 49 50 51 52 53 54 55 56 57 58 |
# File 'lib/tree_diff/dot_visitor.rb', line 47 def to_s String.new(<<-eograph) digraph g { node [ fontsize = "16" shape = "record" style = filled ]; #{@nodes.join + @edges.join} } eograph end |
#visit(node) ⇒ Object
19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/tree_diff/dot_visitor.rb', line 19 def visit node if @root.source == node.source @nodes << String.new(<<-eonode) "#{node.object_id}" [ label = "<f0> (#{node.name})" ]; eonode else i = 0 @nodes << String.new(<<-eonode) "#{node.object_id}" [ label = "{<f0> (#{node.name}) | #{node.source.map { |src| "<f#{i}> #{src}" }.join(" | ")}}" color = blue ]; eonode end node.children.each { |child| @edges << String.new(<<-eoedge) "#{node.object_id}" -> "#{child.object_id}":f0 [ id = #{@edges.length} ]; eoedge } node.children.each { |c| c.accept(self) } end |