Remove code for DateTime-backed TimeWithZone

At one point (I believe until ruby-1.8.0) Time could only represent
values between 1970 and the integer overflow in 2038. On modern Ruby
there does not seem to be a limit.

    >> Time.at(2**128)
    => 10783118943836478994022445751222-08-06 01:04:16 -0700

TimeWithZone will also convert a DateTime to a Time when initialized
with one, so the code we had to catch this overflow and to deal with
DateTime is dead. This commit removes this code and adjusts the test to
be more general (the old test passed but we might as well keep a better
version of the test to check that we have a large both negative and
positive range).

Co-authored-by: Adam Hess <HParker@github.com>
This commit is contained in:
John Hawthorn 2024-06-07 21:29:29 -07:00
parent ef087627f5
commit 725ebc9e10
2 changed files with 6 additions and 6 deletions

@ -300,7 +300,7 @@ def +(other)
if duration_of_variable_length?(other)
method_missing(:+, other)
else
result = utc.acts_like?(:date) ? utc.since(other) : utc + other rescue utc.since(other)
result = utc + other
result.in_time_zone(time_zone)
end
end
@ -336,7 +336,7 @@ def -(other)
elsif duration_of_variable_length?(other)
method_missing(:-, other)
else
result = utc.acts_like?(:date) ? utc.ago(other) : utc - other rescue utc.ago(other)
result = utc - other
result.in_time_zone(time_zone)
end
end
@ -537,7 +537,6 @@ def respond_to?(sym, include_priv = false)
# Ensure proxy class responds to all methods that underlying time instance
# responds to.
def respond_to_missing?(sym, include_priv)
return false if sym.to_sym == :acts_like_date?
time.respond_to?(sym, include_priv)
end

@ -394,9 +394,10 @@ def test_plus_with_integer_when_self_wraps_datetime
assert_equal DateTime.civil(1999, 12, 31, 19, 0, 5), (twz + 5).time
end
def test_plus_when_crossing_time_class_limit
twz = ActiveSupport::TimeWithZone.new(Time.utc(2038, 1, 19), @time_zone)
assert_equal [0, 0, 19, 19, 1, 2038], (twz + 86_400).to_a[0, 6]
def test_no_limit_on_times
twz = ActiveSupport::TimeWithZone.new(Time.utc(2000, 1, 1), @time_zone)
assert_equal [0, 0, 19, 31, 12, 11999], (twz + 10_000.years).to_a[0, 6]
assert_equal [0, 0, 19, 31, 12, -8001], (twz - 10_000.years).to_a[0, 6]
end
def test_plus_with_duration