aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/connection_adapters/postgresql/oid/point.rb
diff options
context:
space:
mode:
authorSean Griffin <sean@thoughtbot.com>2014-06-17 19:55:59 -0600
committerSean Griffin <sean@thoughtbot.com>2014-06-17 19:55:59 -0600
commit455c692b047ad1af1670b5377a1c4313ad0d1228 (patch)
tree4990edf4a0f2dbd17ecebd4efec8b8180803a132 /activerecord/lib/active_record/connection_adapters/postgresql/oid/point.rb
parent3999f9cf0f16585ecd0e8bcd3bc482b46779e8cb (diff)
downloadrails-455c692b047ad1af1670b5377a1c4313ad0d1228.tar.gz
rails-455c692b047ad1af1670b5377a1c4313ad0d1228.tar.bz2
rails-455c692b047ad1af1670b5377a1c4313ad0d1228.zip
Detect in-place changes on point types
Diffstat (limited to 'activerecord/lib/active_record/connection_adapters/postgresql/oid/point.rb')
-rw-r--r--activerecord/lib/active_record/connection_adapters/postgresql/oid/point.rb17
1 files changed, 15 insertions, 2 deletions
diff --git a/activerecord/lib/active_record/connection_adapters/postgresql/oid/point.rb b/activerecord/lib/active_record/connection_adapters/postgresql/oid/point.rb
index 9007bfb178..86277c5542 100644
--- a/activerecord/lib/active_record/connection_adapters/postgresql/oid/point.rb
+++ b/activerecord/lib/active_record/connection_adapters/postgresql/oid/point.rb
@@ -3,20 +3,33 @@ module ActiveRecord
module PostgreSQL
module OID # :nodoc:
class Point < Type::Value
+ include Type::Mutable
+
def type
:point
end
def type_cast(value)
- if ::String === value
+ case value
+ when ::String
if value[0] == '(' && value[-1] == ')'
value = value[1...-1]
end
- value.split(',').map{ |v| Float(v) }
+ type_cast(value.split(','))
+ when ::Array
+ value.map { |v| Float(v) }
else
value
end
end
+
+ def type_cast_for_database(value)
+ if value.is_a?(::Array)
+ PostgreSQLColumn.point_to_string(value)
+ else
+ super
+ end
+ end
end
end
end