Skip to content

Commit

Permalink
Added #to_i to DateTime in ActiveSupport so #to_yaml works correctly …
Browse files Browse the repository at this point in the history
…on ActiveRecord models with DateTime attributes.
  • Loading branch information
Serguei Filimonov authored and gbuesing committed Dec 15, 2009
1 parent 7b61541 commit 2ae8300
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 2 deletions.
11 changes: 11 additions & 0 deletions activerecord/test/cases/yaml_serialization_test.rb
@@ -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
15 changes: 13 additions & 2 deletions activesupport/lib/active_support/core_ext/date_time/conversions.rb
Expand Up @@ -78,7 +78,18 @@ def xmlschema

# 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
4 changes: 4 additions & 0 deletions activesupport/test/core_ext/date_time_ext_test.rb
Expand Up @@ -350,6 +350,10 @@ def test_to_f
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
Expand Down

0 comments on commit 2ae8300

Please sign in to comment.