Methods

Class Index [+]

Quicksearch

Arel::Visitors::Dot

Public Class Methods

new() click to toggle source
    # File lib/arel/visitors/dot.rb, line 17
17:       def initialize
18:         @nodes      = []
19:         @edges      = []
20:         @node_stack = []
21:         @edge_stack = []
22:         @seen       = {}
23:       end

Public Instance Methods

accept(object) click to toggle source
    # File lib/arel/visitors/dot.rb, line 25
25:       def accept object
26:         super
27:         to_dot
28:       end

Private Instance Methods

edge(name) click to toggle source
     # File lib/arel/visitors/dot.rb, line 209
209:       def edge name
210:         edge = Edge.new(name, @node_stack.last)
211:         @edge_stack.push edge
212:         @edges << edge
213:         yield
214:         @edge_stack.pop
215:       end
function(o) click to toggle source
    # File lib/arel/visitors/dot.rb, line 78
78:       def function o
79:         visit_edge o, "expressions"
80:         visit_edge o, "distinct"
81:         visit_edge o, "alias"
82:       end
nary(o) click to toggle source
     # File lib/arel/visitors/dot.rb, line 136
136:       def nary o
137:         o.children.each_with_index do |x,i|
138:           edge(i) { visit x }
139:         end
140:       end
Also aliased as: visit_Arel_Nodes_And
quote(string) click to toggle source
     # File lib/arel/visitors/dot.rb, line 227
227:       def quote string
228:         string.to_s.gsub('"', '\"')
229:       end
to_dot() click to toggle source
     # File lib/arel/visitors/dot.rb, line 231
231:       def to_dot
232:         "digraph \"ARel\" {\nnode [width=0.375,height=0.25,shape=record];\n" +
233:           @nodes.map { |node|
234:             label = "<f0>#{node.name}"
235: 
236:             node.fields.each_with_index do |field, i|
237:               label << "|<f#{i + 1}>#{quote field}"
238:             end
239: 
240:             "#{node.id} [label=\"#{label}\"];"
241:           }.join("\n") + "\n" + @edges.map { |edge|
242:             "#{edge.from.id} -> #{edge.to.id} [label=\"#{edge.name}\"];"
243:           }.join("\n") + "\n}"
244:       end
unary(o) click to toggle source
    # File lib/arel/visitors/dot.rb, line 64
64:       def unary o
65:         visit_edge o, "expr"
66:       end
visit(o) click to toggle source
     # File lib/arel/visitors/dot.rb, line 195
195:       def visit o
196:         if node = @seen[o.object_id]
197:           @edge_stack.last.to = node
198:           return
199:         end
200: 
201:         node = Node.new(o.class.name, o.object_id)
202:         @seen[node.id] = node
203:         @nodes << node
204:         with_node node do
205:           super
206:         end
207:       end
visit_Arel_Attribute(o) click to toggle source
     # File lib/arel/visitors/dot.rb, line 125
125:       def visit_Arel_Attribute o
126:         visit_edge o, "relation"
127:         visit_edge o, "name"
128:       end
visit_Arel_Attributes_Attribute(o) click to toggle source
visit_Arel_Attributes_Boolean(o) click to toggle source
visit_Arel_Attributes_Float(o) click to toggle source
visit_Arel_Attributes_Integer(o) click to toggle source
visit_Arel_Attributes_String(o) click to toggle source
visit_Arel_Attributes_Time(o) click to toggle source
visit_Arel_Nodes_And(o) click to toggle source
Alias for: nary
visit_Arel_Nodes_As(o) click to toggle source
Alias for: binary
visit_Arel_Nodes_Assignment(o) click to toggle source
Alias for: binary
visit_Arel_Nodes_Avg(o) click to toggle source
Alias for: function
visit_Arel_Nodes_Between(o) click to toggle source
Alias for: binary
visit_Arel_Nodes_BindParam(o) click to toggle source
Alias for: unary
visit_Arel_Nodes_Count(o) click to toggle source
    # File lib/arel/visitors/dot.rb, line 40
40:       def visit_Arel_Nodes_Count o
41:         visit_edge o, "expressions"
42:         visit_edge o, "distinct"
43:       end
visit_Arel_Nodes_DeleteStatement(o) click to toggle source
    # File lib/arel/visitors/dot.rb, line 59
59:       def visit_Arel_Nodes_DeleteStatement o
60:         visit_edge o, "relation"
61:         visit_edge o, "wheres"
62:       end
visit_Arel_Nodes_DoesNotMatch(o) click to toggle source
Alias for: binary
visit_Arel_Nodes_Equality(o) click to toggle source
Alias for: binary
visit_Arel_Nodes_Exists(o) click to toggle source
Alias for: function
visit_Arel_Nodes_GreaterThan(o) click to toggle source
Alias for: binary
visit_Arel_Nodes_GreaterThanOrEqual(o) click to toggle source
Alias for: binary
visit_Arel_Nodes_Group(o) click to toggle source
Alias for: unary
visit_Arel_Nodes_Grouping(o) click to toggle source
Alias for: unary
visit_Arel_Nodes_Having(o) click to toggle source
Alias for: unary
visit_Arel_Nodes_In(o) click to toggle source
Alias for: binary
visit_Arel_Nodes_InnerJoin(o) click to toggle source
    # File lib/arel/visitors/dot.rb, line 53
53:       def visit_Arel_Nodes_InnerJoin o
54:         visit_edge o, "left"
55:         visit_edge o, "right"
56:       end
Also aliased as: visit_Arel_Nodes_OuterJoin
visit_Arel_Nodes_InsertStatement(o) click to toggle source
     # File lib/arel/visitors/dot.rb, line 96
 96:       def visit_Arel_Nodes_InsertStatement o
 97:         visit_edge o, "relation"
 98:         visit_edge o, "columns"
 99:         visit_edge o, "values"
100:       end
visit_Arel_Nodes_JoinSource(o) click to toggle source
Alias for: binary
visit_Arel_Nodes_LessThan(o) click to toggle source
Alias for: binary
visit_Arel_Nodes_LessThanOrEqual(o) click to toggle source
Alias for: binary
visit_Arel_Nodes_Limit(o) click to toggle source
Alias for: unary
visit_Arel_Nodes_Matches(o) click to toggle source
Alias for: binary
visit_Arel_Nodes_Max(o) click to toggle source
Alias for: function
visit_Arel_Nodes_Min(o) click to toggle source
Alias for: function
visit_Arel_Nodes_NamedFunction(o) click to toggle source
    # File lib/arel/visitors/dot.rb, line 89
89:       def visit_Arel_Nodes_NamedFunction o
90:         visit_edge o, "name"
91:         visit_edge o, "expressions"
92:         visit_edge o, "distinct"
93:         visit_edge o, "alias"
94:       end
visit_Arel_Nodes_Not(o) click to toggle source
Alias for: unary
visit_Arel_Nodes_NotEqual(o) click to toggle source
Alias for: binary
visit_Arel_Nodes_NotIn(o) click to toggle source
Alias for: binary
visit_Arel_Nodes_Offset(o) click to toggle source
Alias for: unary
visit_Arel_Nodes_On(o) click to toggle source
Alias for: unary
visit_Arel_Nodes_Or(o) click to toggle source
Alias for: binary
visit_Arel_Nodes_Ordering(o) click to toggle source
    # File lib/arel/visitors/dot.rb, line 31
31:       def visit_Arel_Nodes_Ordering o
32:         visit_edge o, "expr"
33:       end
visit_Arel_Nodes_OuterJoin(o) click to toggle source
visit_Arel_Nodes_SelectCore(o) click to toggle source
     # File lib/arel/visitors/dot.rb, line 102
102:       def visit_Arel_Nodes_SelectCore o
103:         visit_edge o, "source"
104:         visit_edge o, "projections"
105:         visit_edge o, "wheres"
106:       end
visit_Arel_Nodes_SelectStatement(o) click to toggle source
     # File lib/arel/visitors/dot.rb, line 108
108:       def visit_Arel_Nodes_SelectStatement o
109:         visit_edge o, "cores"
110:         visit_edge o, "limit"
111:         visit_edge o, "orders"
112:         visit_edge o, "offset"
113:       end
visit_Arel_Nodes_SqlLiteral(o) click to toggle source
Alias for: visit_String
visit_Arel_Nodes_StringJoin(o) click to toggle source
    # File lib/arel/visitors/dot.rb, line 49
49:       def visit_Arel_Nodes_StringJoin o
50:         visit_edge o, "left"
51:       end
visit_Arel_Nodes_Sum(o) click to toggle source
Alias for: function
visit_Arel_Nodes_TableAlias(o) click to toggle source
    # File lib/arel/visitors/dot.rb, line 35
35:       def visit_Arel_Nodes_TableAlias o
36:         visit_edge o, "name"
37:         visit_edge o, "relation"
38:       end
visit_Arel_Nodes_Top(o) click to toggle source
Alias for: unary
visit_Arel_Nodes_UnqualifiedColumn(o) click to toggle source
Alias for: unary
visit_Arel_Nodes_UpdateStatement(o) click to toggle source
     # File lib/arel/visitors/dot.rb, line 115
115:       def visit_Arel_Nodes_UpdateStatement o
116:         visit_edge o, "relation"
117:         visit_edge o, "wheres"
118:         visit_edge o, "values"
119:       end
visit_Arel_Nodes_Values(o) click to toggle source
    # File lib/arel/visitors/dot.rb, line 45
45:       def visit_Arel_Nodes_Values o
46:         visit_edge o, "expressions"
47:       end
visit_Arel_SqlLiteral(o) click to toggle source
Alias for: visit_String
visit_Arel_Table(o) click to toggle source
     # File lib/arel/visitors/dot.rb, line 121
121:       def visit_Arel_Table o
122:         visit_edge o, "name"
123:       end
visit_Array(o) click to toggle source
     # File lib/arel/visitors/dot.rb, line 185
185:       def visit_Array o
186:         o.each_with_index do |x,i|
187:           edge(i) { visit x }
188:         end
189:       end
visit_BigDecimal(o) click to toggle source
Alias for: visit_String
visit_Date(o) click to toggle source
Alias for: visit_String
visit_DateTime(o) click to toggle source
Alias for: visit_String
visit_FalseClass(o) click to toggle source
Alias for: visit_String
visit_Fixnum(o) click to toggle source
Alias for: visit_String
visit_Float(o) click to toggle source
Alias for: visit_String
visit_Hash(o) click to toggle source
     # File lib/arel/visitors/dot.rb, line 179
179:       def visit_Hash o
180:         o.each_with_index do |pair, i|
181:           edge("pair_#{i}")   { visit pair }
182:         end
183:       end
visit_NilClass(o) click to toggle source
Alias for: visit_String
visit_String(o) click to toggle source
     # File lib/arel/visitors/dot.rb, line 163
163:       def visit_String o
164:         @node_stack.last.fields << o
165:       end
visit_Symbol(o) click to toggle source
Alias for: visit_String
visit_Time(o) click to toggle source
Alias for: visit_String
visit_TrueClass(o) click to toggle source
Alias for: visit_String
visit_edge(o, method) click to toggle source
     # File lib/arel/visitors/dot.rb, line 191
191:       def visit_edge o, method
192:         edge(method) { visit o.send(method) }
193:       end
with_node(node) click to toggle source
     # File lib/arel/visitors/dot.rb, line 217
217:       def with_node node
218:         if edge = @edge_stack.last
219:           edge.to = node
220:         end
221: 
222:         @node_stack.push node
223:         yield
224:         @node_stack.pop
225:       end

Disabled; run with --debug to generate this.

[Validate]

Generated with the Darkfish Rdoc Generator 1.1.6.