diff options
author | Aaron Patterson <aaron.patterson@gmail.com> | 2010-12-10 09:16:41 -0800 |
---|---|---|
committer | Aaron Patterson <aaron.patterson@gmail.com> | 2010-12-10 09:16:41 -0800 |
commit | 2d320e366a586fa9869080950e4c27f4aad55a5a (patch) | |
tree | 4a9832e7014f13a41a00d201ac48b3407df01447 | |
parent | a84c34fa08596c563226f3df216e3adf8868f112 (diff) | |
download | rails-2d320e366a586fa9869080950e4c27f4aad55a5a.tar.gz rails-2d320e366a586fa9869080950e4c27f4aad55a5a.tar.bz2 rails-2d320e366a586fa9869080950e4c27f4aad55a5a.zip |
testing nary nodes in the depth first visitor
-rw-r--r-- | lib/arel/select_manager.rb | 2 | ||||
-rw-r--r-- | lib/arel/visitors/depth_first.rb | 6 | ||||
-rw-r--r-- | lib/arel/visitors/dot.rb | 8 | ||||
-rw-r--r-- | test/visitors/test_depth_first.rb | 4 |
4 files changed, 15 insertions, 5 deletions
diff --git a/lib/arel/select_manager.rb b/lib/arel/select_manager.rb index 09491c988b..372b6aae6f 100644 --- a/lib/arel/select_manager.rb +++ b/lib/arel/select_manager.rb @@ -92,7 +92,7 @@ module Arel klass = Nodes::StringJoin end - from create_join(@ctx.froms, relation, nil, klass) + from create_join(@ctx.from, relation, nil, klass) end def having expr diff --git a/lib/arel/visitors/depth_first.rb b/lib/arel/visitors/depth_first.rb index 00f18727f0..49133653c5 100644 --- a/lib/arel/visitors/depth_first.rb +++ b/lib/arel/visitors/depth_first.rb @@ -47,11 +47,15 @@ module Arel alias :visit_Arel_Nodes_InnerJoin :join alias :visit_Arel_Nodes_OuterJoin :join + def nary o + o.children.each { |child| visit child } + end + alias :visit_Arel_Nodes_And :nary + def binary o visit o.left visit o.right end - alias :visit_Arel_Nodes_And :binary alias :visit_Arel_Nodes_As :binary alias :visit_Arel_Nodes_Assignment :binary alias :visit_Arel_Nodes_Between :binary diff --git a/lib/arel/visitors/dot.rb b/lib/arel/visitors/dot.rb index eab5e4afdc..4f80f31421 100644 --- a/lib/arel/visitors/dot.rb +++ b/lib/arel/visitors/dot.rb @@ -123,11 +123,17 @@ module Arel alias :visit_Arel_Attributes_Boolean :visit_Arel_Attribute alias :visit_Arel_Attributes_Attribute :visit_Arel_Attribute + def nary o + o.children.each_with_index do |x,i| + edge(i) { visit x } + end + end + alias :visit_Arel_Nodes_And :nary + def visit_Arel_Nodes_Equality o visit_edge o, "left" visit_edge o, "right" end - alias :visit_Arel_Nodes_And :visit_Arel_Nodes_Equality alias :visit_Arel_Nodes_Or :visit_Arel_Nodes_Equality alias :visit_Arel_Nodes_NotEqual :visit_Arel_Nodes_Equality alias :visit_Arel_Nodes_GreaterThan :visit_Arel_Nodes_Equality diff --git a/test/visitors/test_depth_first.rb b/test/visitors/test_depth_first.rb index 1f1c7ab361..7d7324f627 100644 --- a/test/visitors/test_depth_first.rb +++ b/test/visitors/test_depth_first.rb @@ -110,9 +110,9 @@ module Arel Arel::Nodes::And, ].each do |klass| define_method("test_#{klass.name.gsub('::', '_')}") do - binary = klass.new([:a, :b]) + binary = klass.new([:a, :b, :c]) @visitor.accept binary - assert_equal [:a, :b, binary], @collector.calls + assert_equal [:a, :b, :c, binary], @collector.calls end end |