From 948d9885ac498abdf6f8c9adb139c0b7667d73c7 Mon Sep 17 00:00:00 2001 From: Semyon Pupkov Date: Sun, 31 Jul 2022 17:31:51 +0500 Subject: [PATCH] Introduce occurrences_between_enumerator method --- lib/ice_cube/schedule.rb | 4 ++++ spec/examples/schedule_spec.rb | 13 +++++++++++++ 2 files changed, 17 insertions(+) diff --git a/lib/ice_cube/schedule.rb b/lib/ice_cube/schedule.rb index 68f01cc9..aba9a49c 100644 --- a/lib/ice_cube/schedule.rb +++ b/lib/ice_cube/schedule.rb @@ -207,6 +207,10 @@ def remaining_occurrences_enumerator(from = nil, options = {}) enumerate_occurrences(from, nil, options) end + def occurrences_between_enumerator(begin_time, closing_time, options = {}) + enumerate_occurrences(begin_time, closing_time, options) + end + # Occurrences between two times def occurrences_between(begin_time, closing_time, options = {}) enumerate_occurrences(begin_time, closing_time, options).to_a diff --git a/spec/examples/schedule_spec.rb b/spec/examples/schedule_spec.rb index efbf935d..e42b8759 100644 --- a/spec/examples/schedule_spec.rb +++ b/spec/examples/schedule_spec.rb @@ -318,6 +318,19 @@ end end + describe :occurrences_between_enumerator do + it do + schedule = IceCube::Schedule.new(Time.new(2021, 1, 1)) + schedule.add_recurrence_rule(IceCube::Rule.from_ical("FREQ=MONTHLY;BYMONTHDAY=-1")) + + start = Time.new(2022, 1, 1) + finish = start + 365 * IceCube::ONE_DAY + dates = schedule.occurrences_between_enumerator(start, finish).lazy.map(&:to_date).first(2) + + expect(dates).to eq [Date.new(2022, 1, 31), Date.new(2022, 2, 28)] + end + end + describe :all_occurrences do it "has end times for each occurrence" do schedule = IceCube::Schedule.new(Time.now, duration: IceCube::ONE_HOUR)