class Predicator::Visitors::Dot

Attributes

edges[R]
nodes[R]

Public Class Methods

new() click to toggle source
# File lib/predicator/visitors/dot.rb, line 6
def initialize
  @nodes = []
  @edges = []
end

Public Instance Methods

accept(node) click to toggle source
Calls superclass method
# File lib/predicator/visitors/dot.rb, line 11
      def accept node
        super
        <<-eodot
digraph parse_tree {
  size="8,5"
  node [shape = none];
  edge [dir = none];
  #{@nodes.join "\n  "}
  #{@edges.join "\n  "}
}
        eodot
      end

Private Instance Methods

add_source(source, parent) click to toggle source
# File lib/predicator/visitors/dot.rb, line 103
def add_source source, parent
  ast = Predicator.parse source
  vis = Dot.new
  vis.accept ast
  @nodes += vis.nodes
  @edges += vis.edges
  @edges << "#{parent.object_id} -> #{ast.object_id};"
end
terminal(node) click to toggle source
# File lib/predicator/visitors/dot.rb, line 98
def terminal node
  value = node.left.to_s
  @nodes << "#{node.object_id} [label=\"#{value}\"];"
end
visit_AND(node) click to toggle source
Calls superclass method
# File lib/predicator/visitors/dot.rb, line 53
def visit_AND node
  @nodes << "#{node.object_id} [label=\"and\"];"
  super
end
visit_BETWEEN(node) click to toggle source
Calls superclass method
# File lib/predicator/visitors/dot.rb, line 48
def visit_BETWEEN node
  @nodes << "#{node.object_id} [label=\"between\"];"
  super
end
visit_DATEAGO(node) click to toggle source
Calls superclass method
# File lib/predicator/visitors/dot.rb, line 73
def visit_DATEAGO node
  @nodes << "#{node.object_id} [label=\"ago\"];"
  super
end
visit_DATEFROMNOW(node) click to toggle source
Calls superclass method
# File lib/predicator/visitors/dot.rb, line 78
def visit_DATEFROMNOW node
  @nodes << "#{node.object_id} [label=\"from now\"];"
  super
end
visit_EQ(node) click to toggle source
Calls superclass method
# File lib/predicator/visitors/dot.rb, line 33
def visit_EQ node
  @nodes << "#{node.object_id} [label=\"=\"];"
  super
end
visit_GROUP(node) click to toggle source
Calls superclass method
# File lib/predicator/visitors/dot.rb, line 68
def visit_GROUP node
  @nodes << "#{node.object_id} [label=\"( )\"];"
  super
end
visit_GT(node) click to toggle source
Calls superclass method
# File lib/predicator/visitors/dot.rb, line 38
def visit_GT node
  @nodes << "#{node.object_id} [label=\">\"];"
  super
end
visit_LT(node) click to toggle source
Calls superclass method
# File lib/predicator/visitors/dot.rb, line 43
def visit_LT node
  @nodes << "#{node.object_id} [label=\"<\"];"
  super
end
visit_NOT(node) click to toggle source
Calls superclass method
# File lib/predicator/visitors/dot.rb, line 63
def visit_NOT node
  @nodes << "#{node.object_id} [label=\"!\"];"
  super
end
visit_OR(node) click to toggle source
Calls superclass method
# File lib/predicator/visitors/dot.rb, line 58
def visit_OR node
  @nodes << "#{node.object_id} [label=\"or\"];"
  super
end
visit_STRENDSWITH(node) click to toggle source
Calls superclass method
# File lib/predicator/visitors/dot.rb, line 88
def visit_STRENDSWITH node
  @nodes << "#{node.object_id} [label=\"ends with\"];"
  super
end
visit_STRING(node) click to toggle source
# File lib/predicator/visitors/dot.rb, line 93
def visit_STRING node
  value = node.left
  @nodes << "#{node.object_id} [label=\"'#{value}'\"];"
end
visit_STRSTARTSWITH(node) click to toggle source
Calls superclass method
# File lib/predicator/visitors/dot.rb, line 83
def visit_STRSTARTSWITH node
  @nodes << "#{node.object_id} [label=\"starts with\"];"
  super
end
visit_children(node) click to toggle source
Calls superclass method
# File lib/predicator/visitors/dot.rb, line 26
def visit_children node
  node.children.each do |c|
    @edges << "#{node.object_id} -> #{c.object_id};"
  end
  super
end