aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/connection_adapters
diff options
context:
space:
mode:
authorSean Griffin <sean@thoughtbot.com>2014-05-20 06:16:47 -0700
committerSean Griffin <sean@thoughtbot.com>2014-05-20 07:36:58 -0700
commit36fde2b704164ac02380518350f01a17d3e0208e (patch)
tree0c6722d237ffd583cef9e56a477c98ee6d80b543 /activerecord/lib/active_record/connection_adapters
parent528aff12888aaad131baab488fa1eabe6d2634fa (diff)
downloadrails-36fde2b704164ac02380518350f01a17d3e0208e.tar.gz
rails-36fde2b704164ac02380518350f01a17d3e0208e.tar.bz2
rails-36fde2b704164ac02380518350f01a17d3e0208e.zip
Delegate `#type_cast` to injected type objects on SQLite3
Diffstat (limited to 'activerecord/lib/active_record/connection_adapters')
-rw-r--r--activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb26
-rw-r--r--activerecord/lib/active_record/connection_adapters/type/boolean.rb6
-rw-r--r--activerecord/lib/active_record/connection_adapters/type/date.rb6
-rw-r--r--activerecord/lib/active_record/connection_adapters/type/date_time.rb6
-rw-r--r--activerecord/lib/active_record/connection_adapters/type/decimal.rb6
-rw-r--r--activerecord/lib/active_record/connection_adapters/type/float.rb6
-rw-r--r--activerecord/lib/active_record/connection_adapters/type/integer.rb6
-rw-r--r--activerecord/lib/active_record/connection_adapters/type/string.rb10
-rw-r--r--activerecord/lib/active_record/connection_adapters/type/time.rb6
-rw-r--r--activerecord/lib/active_record/connection_adapters/type/value.rb10
10 files changed, 82 insertions, 6 deletions
diff --git a/activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb b/activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb
index 03ff0d4ead..7f83891043 100644
--- a/activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb
+++ b/activerecord/lib/active_record/connection_adapters/sqlite3_adapter.rb
@@ -42,13 +42,21 @@ module ActiveRecord
module ConnectionAdapters #:nodoc:
class SQLite3Column < Column #:nodoc:
- class << self
- def binary_to_string(value)
- if value.encoding != Encoding::ASCII_8BIT
- value = value.force_encoding(Encoding::ASCII_8BIT)
- end
- value
+ def type_cast(value)
+ if encoded?
+ super
+ else
+ cast_type.type_cast(value)
+ end
+ end
+ end
+
+ class SQLite3Binary < Type::Binary # :nodoc:
+ def cast_value(value)
+ if value.encoding != Encoding::ASCII_8BIT
+ value = value.force_encoding(Encoding::ASCII_8BIT)
end
+ value
end
end
@@ -502,6 +510,12 @@ module ActiveRecord
end
protected
+
+ def initialize_type_map(m)
+ super
+ m.register_type(/binary/i, SQLite3Binary.new)
+ end
+
def select(sql, name = nil, binds = []) #:nodoc:
exec_query(sql, name, binds)
end
diff --git a/activerecord/lib/active_record/connection_adapters/type/boolean.rb b/activerecord/lib/active_record/connection_adapters/type/boolean.rb
index 938d227632..c60a980e80 100644
--- a/activerecord/lib/active_record/connection_adapters/type/boolean.rb
+++ b/activerecord/lib/active_record/connection_adapters/type/boolean.rb
@@ -5,6 +5,12 @@ module ActiveRecord
def type
:boolean
end
+
+ private
+
+ def cast_value(value)
+ Column.value_to_boolean(value)
+ end
end
end
end
diff --git a/activerecord/lib/active_record/connection_adapters/type/date.rb b/activerecord/lib/active_record/connection_adapters/type/date.rb
index 1632f3c8f4..9208da6efe 100644
--- a/activerecord/lib/active_record/connection_adapters/type/date.rb
+++ b/activerecord/lib/active_record/connection_adapters/type/date.rb
@@ -5,6 +5,12 @@ module ActiveRecord
def type
:date
end
+
+ private
+
+ def cast_value(value)
+ Column.value_to_date(value)
+ end
end
end
end
diff --git a/activerecord/lib/active_record/connection_adapters/type/date_time.rb b/activerecord/lib/active_record/connection_adapters/type/date_time.rb
index 1485fd3d80..e1cc9cee4a 100644
--- a/activerecord/lib/active_record/connection_adapters/type/date_time.rb
+++ b/activerecord/lib/active_record/connection_adapters/type/date_time.rb
@@ -5,6 +5,12 @@ module ActiveRecord
def type
:datetime
end
+
+ private
+
+ def cast_value(string)
+ Column.string_to_time(string)
+ end
end
end
end
diff --git a/activerecord/lib/active_record/connection_adapters/type/decimal.rb b/activerecord/lib/active_record/connection_adapters/type/decimal.rb
index 5b39ea9e2f..9581cd5964 100644
--- a/activerecord/lib/active_record/connection_adapters/type/decimal.rb
+++ b/activerecord/lib/active_record/connection_adapters/type/decimal.rb
@@ -5,6 +5,12 @@ module ActiveRecord
def type
:decimal
end
+
+ private
+
+ def cast_value(value)
+ Column.value_to_decimal(value)
+ end
end
end
end
diff --git a/activerecord/lib/active_record/connection_adapters/type/float.rb b/activerecord/lib/active_record/connection_adapters/type/float.rb
index 089169e7c9..2d436d4aa3 100644
--- a/activerecord/lib/active_record/connection_adapters/type/float.rb
+++ b/activerecord/lib/active_record/connection_adapters/type/float.rb
@@ -5,6 +5,12 @@ module ActiveRecord
def type
:float
end
+
+ private
+
+ def cast_value(value)
+ value.to_f
+ end
end
end
end
diff --git a/activerecord/lib/active_record/connection_adapters/type/integer.rb b/activerecord/lib/active_record/connection_adapters/type/integer.rb
index 5510a11bd4..b839e043ad 100644
--- a/activerecord/lib/active_record/connection_adapters/type/integer.rb
+++ b/activerecord/lib/active_record/connection_adapters/type/integer.rb
@@ -5,6 +5,12 @@ module ActiveRecord
def type
:integer
end
+
+ private
+
+ def cast_value(value)
+ Column.value_to_integer(value)
+ end
end
end
end
diff --git a/activerecord/lib/active_record/connection_adapters/type/string.rb b/activerecord/lib/active_record/connection_adapters/type/string.rb
index 0feb4299f5..d6c1c64834 100644
--- a/activerecord/lib/active_record/connection_adapters/type/string.rb
+++ b/activerecord/lib/active_record/connection_adapters/type/string.rb
@@ -5,6 +5,16 @@ module ActiveRecord
def type
:string
end
+
+ private
+
+ def cast_value(value)
+ case value
+ when true then "1"
+ when false then "0"
+ else value.to_s
+ end
+ end
end
end
end
diff --git a/activerecord/lib/active_record/connection_adapters/type/time.rb b/activerecord/lib/active_record/connection_adapters/type/time.rb
index a3a687a8ad..c5c9c44676 100644
--- a/activerecord/lib/active_record/connection_adapters/type/time.rb
+++ b/activerecord/lib/active_record/connection_adapters/type/time.rb
@@ -5,6 +5,12 @@ module ActiveRecord
def type
:time
end
+
+ private
+
+ def cast_value(value)
+ Column.string_to_dummy_time(value)
+ end
end
end
end
diff --git a/activerecord/lib/active_record/connection_adapters/type/value.rb b/activerecord/lib/active_record/connection_adapters/type/value.rb
index f7d7b9351b..a83f0e652d 100644
--- a/activerecord/lib/active_record/connection_adapters/type/value.rb
+++ b/activerecord/lib/active_record/connection_adapters/type/value.rb
@@ -3,6 +3,16 @@ module ActiveRecord
module Type
class Value # :nodoc:
def type; end
+
+ def type_cast(value)
+ cast_value(value) unless value.nil?
+ end
+
+ private
+
+ def cast_value(value)
+ value
+ end
end
end
end