mirror of https://github.com/rails/rails
Added #to_i to DateTime in ActiveSupport so #to_yaml works correctly on ActiveRecord models with DateTime attributes.
This commit is contained in:
parent
7b61541ea5
commit
2ae8300489
|
@ -0,0 +1,11 @@
|
|||
require "cases/helper"
|
||||
require 'models/topic'
|
||||
|
||||
class YamlSerializationTest < ActiveRecord::TestCase
|
||||
def test_to_yaml_with_time_with_zone_should_not_raise_exception
|
||||
Time.zone = ActiveSupport::TimeZone["Pacific Time (US & Canada)"]
|
||||
ActiveRecord::Base.time_zone_aware_attributes = true
|
||||
topic = Topic.new(:written_on => DateTime.now)
|
||||
assert_nothing_raised { topic.to_yaml }
|
||||
end
|
||||
end
|
|
@ -78,7 +78,18 @@ class DateTime
|
|||
|
||||
# Converts self to a floating-point number of seconds since the Unix epoch
|
||||
def to_f
|
||||
days_since_unix_epoch = self - ::DateTime.civil(1970)
|
||||
(days_since_unix_epoch * 86_400).to_f
|
||||
seconds_since_unix_epoch.to_f
|
||||
end
|
||||
|
||||
# Converts self to an integer number of seconds since the Unix epoch
|
||||
def to_i
|
||||
seconds_since_unix_epoch.to_i
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def seconds_since_unix_epoch
|
||||
seconds_per_day = 86_400
|
||||
(self - ::DateTime.civil(1970)) * seconds_per_day
|
||||
end
|
||||
end
|
||||
|
|
|
@ -350,6 +350,10 @@ class DateTimeExtCalculationsTest < Test::Unit::TestCase
|
|||
assert_equal 946684800.0, DateTime.civil(1999,12,31,19,0,0,Rational(-5,24)).to_f
|
||||
end
|
||||
|
||||
def test_to_i
|
||||
assert_equal 946684800, DateTime.civil(2000).to_i
|
||||
end
|
||||
|
||||
protected
|
||||
def with_env_tz(new_tz = 'US/Eastern')
|
||||
old_tz, ENV['TZ'] = ENV['TZ'], new_tz
|
||||
|
|
Loading…
Reference in New Issue