aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/attribute_methods
diff options
context:
space:
mode:
authorAaron Patterson <aaron.patterson@gmail.com>2012-02-03 15:14:00 -0800
committerAaron Patterson <aaron.patterson@gmail.com>2012-02-07 14:13:46 -0800
commit5396fca1e2ab656e460713523efe3a5b1e967d30 (patch)
tree23e834917a5b694bb9ebcd4ade1998bab3470327 /activerecord/lib/active_record/attribute_methods
parent98211755bb8145d2622b46bff9246daa607dafe4 (diff)
downloadrails-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.rb4
-rw-r--r--activerecord/lib/active_record/attribute_methods/time_zone_conversion.rb19
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