From 32386f88601ab9c6d4a1a292ed087b896a25fd1f Mon Sep 17 00:00:00 2001
From: Aaron Patterson <aaron.patterson@gmail.com>
Date: Sat, 25 Dec 2010 12:14:30 -0700
Subject: testing binary ops in the dot visitor

---
 lib/arel/select_manager.rb |  3 ++-
 lib/arel/visitors/dot.rb   | 30 ++++++++++++++++--------------
 test/visitors/test_dot.rb  | 28 ++++++++++++++++++++++++++++
 3 files changed, 46 insertions(+), 15 deletions(-)

diff --git a/lib/arel/select_manager.rb b/lib/arel/select_manager.rb
index 37f06f6a9f..55700ab92d 100644
--- a/lib/arel/select_manager.rb
+++ b/lib/arel/select_manager.rb
@@ -9,9 +9,10 @@ module Arel
       from table
     end
 
-    def taken
+    def limit
       @ast.limit
     end
+    alias :taken :limit
 
     def constraints
       @ctx.wheres
diff --git a/lib/arel/visitors/dot.rb b/lib/arel/visitors/dot.rb
index cfd231020d..4bb45bc707 100644
--- a/lib/arel/visitors/dot.rb
+++ b/lib/arel/visitors/dot.rb
@@ -127,23 +127,25 @@ module Arel
       end
       alias :visit_Arel_Nodes_And :nary
 
-      def visit_Arel_Nodes_Equality o
+      def binary o
         visit_edge o, "left"
         visit_edge o, "right"
       end
-      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
-      alias :visit_Arel_Nodes_GreaterThanOrEqual :visit_Arel_Nodes_Equality
-      alias :visit_Arel_Nodes_Assignment         :visit_Arel_Nodes_Equality
-      alias :visit_Arel_Nodes_In                 :visit_Arel_Nodes_Equality
-      alias :visit_Arel_Nodes_LessThan           :visit_Arel_Nodes_Equality
-      alias :visit_Arel_Nodes_LessThanOrEqual    :visit_Arel_Nodes_Equality
-      alias :visit_Arel_Nodes_Between            :visit_Arel_Nodes_Equality
-      alias :visit_Arel_Nodes_NotIn              :visit_Arel_Nodes_Equality
-      alias :visit_Arel_Nodes_DoesNotMatch       :visit_Arel_Nodes_Equality
-      alias :visit_Arel_Nodes_Matches            :visit_Arel_Nodes_Equality
-      alias :visit_Arel_Nodes_JoinSource         :visit_Arel_Nodes_Equality
+      alias :visit_Arel_Nodes_As                 :binary
+      alias :visit_Arel_Nodes_Assignment         :binary
+      alias :visit_Arel_Nodes_Between            :binary
+      alias :visit_Arel_Nodes_DoesNotMatch       :binary
+      alias :visit_Arel_Nodes_Equality           :binary
+      alias :visit_Arel_Nodes_GreaterThan        :binary
+      alias :visit_Arel_Nodes_GreaterThanOrEqual :binary
+      alias :visit_Arel_Nodes_In                 :binary
+      alias :visit_Arel_Nodes_JoinSource         :binary
+      alias :visit_Arel_Nodes_LessThan           :binary
+      alias :visit_Arel_Nodes_LessThanOrEqual    :binary
+      alias :visit_Arel_Nodes_Matches            :binary
+      alias :visit_Arel_Nodes_NotEqual           :binary
+      alias :visit_Arel_Nodes_NotIn              :binary
+      alias :visit_Arel_Nodes_Or                 :binary
 
       def visit_String o
         @node_stack.last.fields << o
diff --git a/test/visitors/test_dot.rb b/test/visitors/test_dot.rb
index 19a554ce42..de6dd87c4c 100644
--- a/test/visitors/test_dot.rb
+++ b/test/visitors/test_dot.rb
@@ -22,6 +22,34 @@ module Arel
           @visitor.accept op
         end
       end
+
+      # binary ops
+      [
+        Arel::Nodes::Assignment,
+        Arel::Nodes::Between,
+        Arel::Nodes::DoesNotMatch,
+        Arel::Nodes::Equality,
+        Arel::Nodes::GreaterThan,
+        Arel::Nodes::GreaterThanOrEqual,
+        Arel::Nodes::In,
+        Arel::Nodes::LessThan,
+        Arel::Nodes::LessThanOrEqual,
+        Arel::Nodes::Matches,
+        Arel::Nodes::NotEqual,
+        Arel::Nodes::NotIn,
+        Arel::Nodes::Or,
+        Arel::Nodes::TableAlias,
+        Arel::Nodes::Values,
+        Arel::Nodes::As,
+        Arel::Nodes::DeleteStatement,
+        Arel::Nodes::Ordering,
+        Arel::Nodes::JoinSource,
+      ].each do |klass|
+        define_method("test_#{klass.name.gsub('::', '_')}") do
+          binary = klass.new(:a, :b)
+          @visitor.accept binary
+        end
+      end
     end
   end
 end
-- 
cgit v1.2.3