diff options
author | Neer Friedman <neerfri@gmail.com> | 2013-07-07 17:38:09 +0300 |
---|---|---|
committer | Andrew White <andyw@pixeltrix.co.uk> | 2013-07-09 13:43:56 +0100 |
commit | 484253515c0e05760541dc48946361185c9e6904 (patch) | |
tree | dc0f23aa9691c93c03643d5aa5c0e429e9a2e77b /activesupport | |
parent | 1a6eb1e5609cbd9cb3904dcc06faa98a14d218f2 (diff) | |
download | rails-484253515c0e05760541dc48946361185c9e6904.tar.gz rails-484253515c0e05760541dc48946361185c9e6904.tar.bz2 rails-484253515c0e05760541dc48946361185c9e6904.zip |
Fix microsecond precision of Time#at_with_coercion
When Time.at_with_coercion (wraps Time.at) is called with a single
argument that "acts_like?(:time)" it is coerced to integer thus losing
it's microsecond percision.
This commits changes this to use `#to_f` to prevent the problem
Diffstat (limited to 'activesupport')
-rw-r--r-- | activesupport/lib/active_support/core_ext/time/calculations.rb | 2 | ||||
-rw-r--r-- | activesupport/test/core_ext/time_ext_test.rb | 4 |
2 files changed, 5 insertions, 1 deletions
diff --git a/activesupport/lib/active_support/core_ext/time/calculations.rb b/activesupport/lib/active_support/core_ext/time/calculations.rb index fa74fee78a..8270093dc7 100644 --- a/activesupport/lib/active_support/core_ext/time/calculations.rb +++ b/activesupport/lib/active_support/core_ext/time/calculations.rb @@ -34,7 +34,7 @@ class Time # instances can be used when called with a single argument def at_with_coercion(*args) if args.size == 1 && args.first.acts_like?(:time) - at_without_coercion(args.first.to_i) + at_without_coercion(args.first.to_f) else at_without_coercion(*args) end diff --git a/activesupport/test/core_ext/time_ext_test.rb b/activesupport/test/core_ext/time_ext_test.rb index d43cf41201..1681702bda 100644 --- a/activesupport/test/core_ext/time_ext_test.rb +++ b/activesupport/test/core_ext/time_ext_test.rb @@ -711,6 +711,10 @@ class TimeExtCalculationsTest < ActiveSupport::TestCase end end + def test_at_with_time_microsecond_precision + assert_equal Time.at(Time.utc(2000, 1, 1, 0, 0, 0, 111)).to_f, Time.utc(2000, 1, 1, 0, 0, 0, 111).to_f + end + def test_eql? assert_equal true, Time.utc(2000).eql?( ActiveSupport::TimeWithZone.new(Time.utc(2000), ActiveSupport::TimeZone['UTC']) ) assert_equal true, Time.utc(2000).eql?( ActiveSupport::TimeWithZone.new(Time.utc(2000), ActiveSupport::TimeZone["Hawaii"]) ) |