aboutsummaryrefslogtreecommitdiffstats
path: root/activemodel/lib
diff options
context:
space:
mode:
authorSayan Chakraborty <mail.sayanc@gmail.com>2017-07-01 19:18:18 +0530
committerSayan Chakraborty <mail.sayanc@gmail.com>2017-12-17 23:56:16 +0530
commiteb73dfc0677cb5b3a0f559020fe5d7df556056b4 (patch)
treef3973a4e3105381205e669228f12ef46476e3b3f /activemodel/lib
parentde354cc3573e8b6e81448080a21c313f5bdbab7b (diff)
downloadrails-eb73dfc0677cb5b3a0f559020fe5d7df556056b4.tar.gz
rails-eb73dfc0677cb5b3a0f559020fe5d7df556056b4.tar.bz2
rails-eb73dfc0677cb5b3a0f559020fe5d7df556056b4.zip
Return correct date in ActiveModel for time to date conversions
time.to_date conversion happens considering leap years so a conversion of "Day.new({'day(1i)'=>'1', 'day(2i)'=>'1', 'day(3i)'=>'1'})" results in saving the date as Mon, 03 Jan 0001 which might seem weird on the user level, hence falling back to parsing on string level resolves this data mismatch Fixes #28521
Diffstat (limited to 'activemodel/lib')
-rw-r--r--activemodel/lib/active_model/type/date.rb14
1 files changed, 13 insertions, 1 deletions
diff --git a/activemodel/lib/active_model/type/date.rb b/activemodel/lib/active_model/type/date.rb
index 8cecc16d0f..edc408f541 100644
--- a/activemodel/lib/active_model/type/date.rb
+++ b/activemodel/lib/active_model/type/date.rb
@@ -17,6 +17,18 @@ module ActiveModel
value.to_s(:db).inspect
end
+ def is_utc?
+ ::Time.zone_default.nil? || ::Time.zone_default =~ "UTC"
+ end
+
+ def default_timezone
+ if is_utc?
+ :utc
+ else
+ :local
+ end
+ end
+
private
def cast_value(value)
@@ -49,7 +61,7 @@ module ActiveModel
def value_from_multiparameter_assignment(*)
time = super
- time && time.to_date
+ time && new_date(time.year, time.mon, time.mday)
end
end
end