Permalink
Browse files

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
  • Loading branch information...
1 parent 1a6eb1e commit 484253515c0e05760541dc48946361185c9e6904 @neerfri neerfri committed with pixeltrix Jul 7, 2013
@@ -34,7 +34,7 @@ def current
# 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
@@ -711,6 +711,10 @@ def test_at_with_time_with_zone
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"]) )

0 comments on commit 4842535

Please sign in to comment.