mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Merge pull request #11474 from bogdan/time-with-zone-succ
Prevent server blow up when iterating over TimeWithZone Range
This commit is contained in:
commit
ffc8abd41b
3 changed files with 47 additions and 0 deletions
|
@ -1,3 +1,4 @@
|
|||
require 'active_support/core_ext/range/conversions'
|
||||
require 'active_support/core_ext/range/include_range'
|
||||
require 'active_support/core_ext/range/overlaps'
|
||||
require 'active_support/core_ext/range/each'
|
||||
|
|
24
activesupport/lib/active_support/core_ext/range/each.rb
Normal file
24
activesupport/lib/active_support/core_ext/range/each.rb
Normal file
|
@ -0,0 +1,24 @@
|
|||
require 'active_support/core_ext/module/aliasing'
|
||||
require 'active_support/core_ext/object/acts_like'
|
||||
|
||||
class Range #:nodoc:
|
||||
|
||||
def each_with_time_with_zone(&block)
|
||||
ensure_iteration_allowed
|
||||
each_without_time_with_zone(&block)
|
||||
end
|
||||
alias_method_chain :each, :time_with_zone
|
||||
|
||||
def step_with_time_with_zone(n = 1, &block)
|
||||
ensure_iteration_allowed
|
||||
step_without_time_with_zone(n, &block)
|
||||
end
|
||||
alias_method_chain :step, :time_with_zone
|
||||
|
||||
private
|
||||
def ensure_iteration_allowed
|
||||
if first.acts_like?(:time)
|
||||
raise TypeError, "can't iterate from #{first.class}"
|
||||
end
|
||||
end
|
||||
end
|
|
@ -90,4 +90,26 @@ class RangeTest < ActiveSupport::TestCase
|
|||
time_range_2 = Time.utc(2005, 12, 10, 17, 31)..Time.utc(2005, 12, 10, 18, 00)
|
||||
assert !time_range_1.overlaps?(time_range_2)
|
||||
end
|
||||
|
||||
def test_each_on_time_with_zone
|
||||
twz = ActiveSupport::TimeWithZone.new(nil, ActiveSupport::TimeZone['Eastern Time (US & Canada)'] , Time.utc(2006,11,28,10,30))
|
||||
assert_raises TypeError do
|
||||
((twz - 1.hour)..twz).each {}
|
||||
end
|
||||
end
|
||||
|
||||
def test_step_on_time_with_zone
|
||||
twz = ActiveSupport::TimeWithZone.new(nil, ActiveSupport::TimeZone['Eastern Time (US & Canada)'] , Time.utc(2006,11,28,10,30))
|
||||
assert_raises TypeError do
|
||||
((twz - 1.hour)..twz).step(1) {}
|
||||
end
|
||||
end
|
||||
|
||||
def test_include_on_time_with_zone
|
||||
twz = ActiveSupport::TimeWithZone.new(nil, ActiveSupport::TimeZone['Eastern Time (US & Canada)'] , Time.utc(2006,11,28,10,30))
|
||||
assert_raises TypeError do
|
||||
((twz - 1.hour)..twz).include?(twz)
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue