From fc74a51c3fd51d33fb4891a1f0c8d4571a776905 Mon Sep 17 00:00:00 2001
From: Santiago Pastorino <santiago@wyeworks.com>
Date: Wed, 11 Jan 2012 23:13:54 -0200
Subject: on and ON are type casted to a true boolean column

---
 .../active_record/connection_adapters/column.rb    |  4 +--
 activerecord/test/cases/column_test.rb             | 29 ++++++++++++++++++++++
 2 files changed, 31 insertions(+), 2 deletions(-)
 create mode 100644 activerecord/test/cases/column_test.rb

diff --git a/activerecord/lib/active_record/connection_adapters/column.rb b/activerecord/lib/active_record/connection_adapters/column.rb
index a7856539b7..88fe9c396e 100644
--- a/activerecord/lib/active_record/connection_adapters/column.rb
+++ b/activerecord/lib/active_record/connection_adapters/column.rb
@@ -5,8 +5,8 @@ module ActiveRecord
   module ConnectionAdapters
     # An abstract definition of a column in a table.
     class Column
-      TRUE_VALUES = [true, 1, '1', 't', 'T', 'true', 'TRUE'].to_set
-      FALSE_VALUES = [false, 0, '0', 'f', 'F', 'false', 'FALSE'].to_set
+      TRUE_VALUES = [true, 1, '1', 't', 'T', 'true', 'TRUE', 'on', 'ON'].to_set
+      FALSE_VALUES = [false, 0, '0', 'f', 'F', 'false', 'FALSE', 'off', 'OFF'].to_set
 
       module Format
         ISO_DATE = /\A(\d{4})-(\d\d)-(\d\d)\z/
diff --git a/activerecord/test/cases/column_test.rb b/activerecord/test/cases/column_test.rb
new file mode 100644
index 0000000000..ccc57cb876
--- /dev/null
+++ b/activerecord/test/cases/column_test.rb
@@ -0,0 +1,29 @@
+require "cases/helper"
+
+module ActiveRecord
+  module ConnectionAdapters
+    class ColumnTest < ActiveRecord::TestCase
+      def test_type_cast_boolean
+        column = Column.new("field", nil, "boolean")
+        assert column.type_cast(true)
+        assert column.type_cast(1)
+        assert column.type_cast('1')
+        assert column.type_cast('t')
+        assert column.type_cast('T')
+        assert column.type_cast('true')
+        assert column.type_cast('TRUE')
+        assert column.type_cast('on')
+        assert column.type_cast('ON')
+        assert !column.type_cast(false)
+        assert !column.type_cast(0)
+        assert !column.type_cast('0')
+        assert !column.type_cast('f')
+        assert !column.type_cast('F')
+        assert !column.type_cast('false')
+        assert !column.type_cast('FALSE')
+        assert !column.type_cast('off')
+        assert !column.type_cast('OFF')
+      end
+    end
+  end
+end
-- 
cgit v1.2.3