From 6160bfbda1d1781c3b08a33ec4955f170e95be11 Mon Sep 17 00:00:00 2001
From: Sean Griffin <sean@thoughtbot.com>
Date: Mon, 29 Dec 2014 11:24:44 -0700
Subject: Allow a type caster to be given to the `Arel::Table` object

This will allow most consuming code to avoid the deprecation introduced
in 008445d6fd5f825d9b445ac75a7be67f0f7ab52c. The only code which will be
affected is code that is building the `Arel::Table` object manually,
rather than calling `arel_table` on an Active Record class. Hopefully
this case will be rare enough that we don't need to introduce any
additional APIs to work around it.
---
 test/attributes/test_attribute.rb | 34 ++++++++++++++++++++++++++++++++++
 1 file changed, 34 insertions(+)

(limited to 'test/attributes')

diff --git a/test/attributes/test_attribute.rb b/test/attributes/test_attribute.rb
index e4ddb27e72..0f6d6e447b 100644
--- a/test/attributes/test_attribute.rb
+++ b/test/attributes/test_attribute.rb
@@ -950,5 +950,39 @@ module Arel
         end
       end
     end
+
+    describe 'type casting' do
+      it 'does not type cast by default' do
+        table = Table.new(:foo)
+        condition = table["id"].eq("1")
+
+        refute table.able_to_type_cast?
+        condition.to_sql.must_equal %("foo"."id" = '1')
+      end
+
+      it 'type casts when given an explicit caster' do
+        fake_caster = Object.new
+        def fake_caster.type_cast_for_database(attr_name, value)
+          if attr_name == "id"
+            value.to_i
+          else
+            value
+          end
+        end
+        table = Table.new(:foo, type_caster: fake_caster)
+        condition = table["id"].eq("1").and(table["other_id"].eq("2"))
+
+        assert table.able_to_type_cast?
+        condition.to_sql.must_equal %("foo"."id" = 1 AND "foo"."other_id" = '2')
+      end
+
+      it 'falls back to using the connection adapter for type casting' do
+        table = Table.new(:users)
+        condition = table["id"].eq("1")
+
+        refute table.able_to_type_cast?
+        condition.to_sql.must_equal %("users"."id" = 1)
+      end
+    end
   end
 end
-- 
cgit v1.2.3