diff options
author | Aaron Patterson <aaron.patterson@gmail.com> | 2012-02-03 15:14:00 -0800 |
---|---|---|
committer | Aaron Patterson <aaron.patterson@gmail.com> | 2012-02-07 14:13:46 -0800 |
commit | 5396fca1e2ab656e460713523efe3a5b1e967d30 (patch) | |
tree | 23e834917a5b694bb9ebcd4ade1998bab3470327 /activerecord/lib/active_record/attribute_methods | |
parent | 98211755bb8145d2622b46bff9246daa607dafe4 (diff) | |
download | rails-5396fca1e2ab656e460713523efe3a5b1e967d30.tar.gz rails-5396fca1e2ab656e460713523efe3a5b1e967d30.tar.bz2 rails-5396fca1e2ab656e460713523efe3a5b1e967d30.zip |
give each PG type a `type` method and decortate tz attributes
Diffstat (limited to 'activerecord/lib/active_record/attribute_methods')
-rw-r--r-- | activerecord/lib/active_record/attribute_methods/serialization.rb | 4 | ||||
-rw-r--r-- | activerecord/lib/active_record/attribute_methods/time_zone_conversion.rb | 19 |
2 files changed, 22 insertions, 1 deletions
diff --git a/activerecord/lib/active_record/attribute_methods/serialization.rb b/activerecord/lib/active_record/attribute_methods/serialization.rb index 3bc749dabf..1fe5d9de20 100644 --- a/activerecord/lib/active_record/attribute_methods/serialization.rb +++ b/activerecord/lib/active_record/attribute_methods/serialization.rb @@ -18,6 +18,10 @@ module ActiveRecord def type_cast(value) value.unserialized_value end + + def type + @column.type + end end class Attribute < Struct.new(:coder, :value, :state) diff --git a/activerecord/lib/active_record/attribute_methods/time_zone_conversion.rb b/activerecord/lib/active_record/attribute_methods/time_zone_conversion.rb index 19dcceea88..802add9986 100644 --- a/activerecord/lib/active_record/attribute_methods/time_zone_conversion.rb +++ b/activerecord/lib/active_record/attribute_methods/time_zone_conversion.rb @@ -4,6 +4,21 @@ require 'active_support/core_ext/object/inclusion' module ActiveRecord module AttributeMethods module TimeZoneConversion + class Type # :nodoc: + def initialize(column) + @column = column + end + + def type_cast(value) + value = @column.type_cast(value) + value.acts_like?(:time) ? value.in_time_zone : value + end + + def type + @column.type + end + end + extend ActiveSupport::Concern included do @@ -64,7 +79,9 @@ module ActiveRecord end def create_time_zone_conversion_attribute?(name, column) - time_zone_aware_attributes && !self.skip_time_zone_conversion_for_attributes.include?(name.to_sym) && column.type.in?([:datetime, :timestamp]) + time_zone_aware_attributes && + !self.skip_time_zone_conversion_for_attributes.include?(name.to_sym) && + [:datetime, :timestamp].include?(column.type) end end end |