class Arel::Visitors::Dot
Public Class Methods
Source
# File lib/arel/visitors/dot.rb, line 18 def initialize super() @nodes = [] @edges = [] @node_stack = [] @edge_stack = [] @seen = {} end
Calls superclass method
Arel::Visitors::Visitor::new
Public Instance Methods
Source
# File lib/arel/visitors/dot.rb, line 27 def accept object, collector visit object collector << to_dot end
Private Instance Methods
Source
# File lib/arel/visitors/dot.rb, line 182 def binary o visit_edge o, "left" visit_edge o, "right" end
Also aliased as: visit_Arel_Nodes_As, visit_Arel_Nodes_Assignment, visit_Arel_Nodes_Between, visit_Arel_Nodes_Concat, visit_Arel_Nodes_DoesNotMatch, visit_Arel_Nodes_Equality, visit_Arel_Nodes_GreaterThan, visit_Arel_Nodes_GreaterThanOrEqual, visit_Arel_Nodes_In, visit_Arel_Nodes_JoinSource, visit_Arel_Nodes_LessThan, visit_Arel_Nodes_LessThanOrEqual, visit_Arel_Nodes_Matches, visit_Arel_Nodes_NotEqual, visit_Arel_Nodes_NotIn, visit_Arel_Nodes_Or, visit_Arel_Nodes_Over
Source
# File lib/arel/visitors/dot.rb, line 253 def edge name edge = Edge.new(name, @node_stack.last) @edge_stack.push edge @edges << edge yield @edge_stack.pop end
Source
# File lib/arel/visitors/dot.rb, line 116 def extract o visit_edge o, "expressions" visit_edge o, "alias" end
Also aliased as: visit_Arel_Nodes_Extract
Source
# File lib/arel/visitors/dot.rb, line 105 def function o visit_edge o, "expressions" visit_edge o, "distinct" visit_edge o, "alias" end
Source
# File lib/arel/visitors/dot.rb, line 97 def named_window o visit_edge o, "partitions" visit_edge o, "orders" visit_edge o, "framing" visit_edge o, "name" end
Also aliased as: visit_Arel_Nodes_NamedWindow
Source
# File lib/arel/visitors/dot.rb, line 175 def nary o o.children.each_with_index do |x,i| edge(i) { visit x } end end
Also aliased as: visit_Arel_Nodes_And
Source
# File lib/arel/visitors/dot.rb, line 271 def quote string string.to_s.gsub('"', '\"') end
Source
# File lib/arel/visitors/dot.rb, line 275 def to_dot "digraph \"Arel\" {\nnode [width=0.375,height=0.25,shape=record];\n" + @nodes.map { |node| label = "<f0>#{node.name}" node.fields.each_with_index do |field, i| label += "|<f#{i + 1}>#{quote field}" end "#{node.id} [label=\"#{label}\"];" }.join("\n") + "\n" + @edges.map { |edge| "#{edge.from.id} -> #{edge.to.id} [label=\"#{edge.name}\"];" }.join("\n") + "\n}" end
Source
# File lib/arel/visitors/dot.rb, line 69 def unary o visit_edge o, "expr" end
Also aliased as: visit_Arel_Nodes_Group, visit_Arel_Nodes_Cube, visit_Arel_Nodes_RollUp, visit_Arel_Nodes_GroupingSet, visit_Arel_Nodes_GroupingElement, visit_Arel_Nodes_Grouping, visit_Arel_Nodes_Having, visit_Arel_Nodes_Limit, visit_Arel_Nodes_Not, visit_Arel_Nodes_Offset, visit_Arel_Nodes_On, visit_Arel_Nodes_Top, visit_Arel_Nodes_UnqualifiedColumn, visit_Arel_Nodes_Preceding, visit_Arel_Nodes_Following, visit_Arel_Nodes_Rows, visit_Arel_Nodes_Range
Source
# File lib/arel/visitors/dot.rb, line 239 def visit o if node = @seen[o.object_id] @edge_stack.last.to = node return end node = Node.new(o.class.name, o.object_id) @seen[node.id] = node @nodes << node with_node node do super end end
Calls superclass method
Arel::Visitors::Visitor#visit
Source
# File lib/arel/visitors/dot.rb, line 164 def visit_Arel_Attribute o visit_edge o, "relation" visit_edge o, "name" end
Source
# File lib/arel/visitors/dot.rb, line 220 def visit_Arel_Nodes_BindParam o; end
Source
# File lib/arel/visitors/dot.rb, line 159 def visit_Arel_Nodes_Casted o visit_edge o, 'val' visit_edge o, 'attribute' end
Source
# File lib/arel/visitors/dot.rb, line 43 def visit_Arel_Nodes_Count o visit_edge o, "expressions" visit_edge o, "distinct" end
Source
# File lib/arel/visitors/dot.rb, line 64 def visit_Arel_Nodes_DeleteStatement o visit_edge o, "relation" visit_edge o, "wheres" end
Source
# File lib/arel/visitors/dot.rb, line 56 def visit_Arel_Nodes_InnerJoin o visit_edge o, "left" visit_edge o, "right" end
Source
# File lib/arel/visitors/dot.rb, line 129 def visit_Arel_Nodes_InsertStatement o visit_edge o, "relation" visit_edge o, "columns" visit_edge o, "values" end
Source
# File lib/arel/visitors/dot.rb, line 122 def visit_Arel_Nodes_NamedFunction o visit_edge o, "name" visit_edge o, "expressions" visit_edge o, "distinct" visit_edge o, "alias" end
Source
# File lib/arel/visitors/dot.rb, line 34 def visit_Arel_Nodes_Ordering o visit_edge o, "expr" end
Source
# File lib/arel/visitors/dot.rb, line 135 def visit_Arel_Nodes_SelectCore o visit_edge o, "source" visit_edge o, "projections" visit_edge o, "wheres" visit_edge o, "windows" end
Source
# File lib/arel/visitors/dot.rb, line 142 def visit_Arel_Nodes_SelectStatement o visit_edge o, "cores" visit_edge o, "limit" visit_edge o, "orders" visit_edge o, "offset" end
Source
# File lib/arel/visitors/dot.rb, line 52 def visit_Arel_Nodes_StringJoin o visit_edge o, "left" end
Source
# File lib/arel/visitors/dot.rb, line 38 def visit_Arel_Nodes_TableAlias o visit_edge o, "name" visit_edge o, "relation" end
Source
# File lib/arel/visitors/dot.rb, line 149 def visit_Arel_Nodes_UpdateStatement o visit_edge o, "relation" visit_edge o, "wheres" visit_edge o, "values" end
Source
# File lib/arel/visitors/dot.rb, line 48 def visit_Arel_Nodes_Values o visit_edge o, "expressions" end
Source
# File lib/arel/visitors/dot.rb, line 155 def visit_Arel_Table o visit_edge o, "name" end
Source
# File lib/arel/visitors/dot.rb, line 228 def visit_Array o o.each_with_index do |x,i| edge(i) { visit x } end end
Also aliased as: visit_Set
Source
# File lib/arel/visitors/dot.rb, line 222 def visit_Hash o o.each_with_index do |pair, i| edge("pair_#{i}") { visit pair } end end
Source
# File lib/arel/visitors/dot.rb, line 204 def visit_String o @node_stack.last.fields << o end
Source
# File lib/arel/visitors/dot.rb, line 235 def visit_edge o, method edge(method) { visit o.send(method) } end
Source
# File lib/arel/visitors/dot.rb, line 90 def window o visit_edge o, "partitions" visit_edge o, "orders" visit_edge o, "framing" end
Also aliased as: visit_Arel_Nodes_Window
Source
# File lib/arel/visitors/dot.rb, line 261 def with_node node if edge = @edge_stack.last edge.to = node end @node_stack.push node yield @node_stack.pop end