rrule 0.4.1 → 0.4.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (53) hide show
  1. checksums.yaml +5 -5
  2. data/.gitignore +3 -0
  3. data/.rubocop.yml +28 -0
  4. data/.travis.yml +27 -1
  5. data/Appraisals +27 -0
  6. data/CHANGELOG.md +14 -0
  7. data/Gemfile +9 -0
  8. data/Rakefile +9 -3
  9. data/gemfiles/activesupport_2.3_LTS.gemfile +16 -0
  10. data/gemfiles/activesupport_3.gemfile +16 -0
  11. data/gemfiles/activesupport_4.gemfile +15 -0
  12. data/gemfiles/activesupport_5.gemfile +15 -0
  13. data/gemfiles/activesupport_6.gemfile +15 -0
  14. data/gemfiles/activesupport_7.gemfile +15 -0
  15. data/lib/rrule/context.rb +5 -3
  16. data/lib/rrule/filters/by_month.rb +2 -0
  17. data/lib/rrule/filters/by_month_day.rb +2 -0
  18. data/lib/rrule/filters/by_week_day.rb +5 -3
  19. data/lib/rrule/filters/by_week_number.rb +2 -0
  20. data/lib/rrule/filters/by_year_day.rb +3 -1
  21. data/lib/rrule/frequencies/daily.rb +2 -0
  22. data/lib/rrule/frequencies/frequency.rb +4 -12
  23. data/lib/rrule/frequencies/monthly.rb +2 -0
  24. data/lib/rrule/frequencies/simple_weekly.rb +6 -6
  25. data/lib/rrule/frequencies/weekly.rb +2 -0
  26. data/lib/rrule/frequencies/yearly.rb +2 -0
  27. data/lib/rrule/generators/all_occurrences.rb +2 -0
  28. data/lib/rrule/generators/by_set_position.rb +2 -0
  29. data/lib/rrule/generators/generator.rb +5 -1
  30. data/lib/rrule/rule.rb +29 -37
  31. data/lib/rrule/version.rb +5 -0
  32. data/lib/rrule/weekday.rb +4 -2
  33. data/lib/rrule.rb +4 -0
  34. data/rrule.gemspec +18 -11
  35. data/scripts/benchmark.rb +3 -1
  36. metadata +30 -52
  37. data/spec/context_spec.rb +0 -261
  38. data/spec/filters/by_month_day_spec.rb +0 -35
  39. data/spec/filters/by_month_spec.rb +0 -35
  40. data/spec/filters/by_week_day_spec.rb +0 -35
  41. data/spec/filters/by_week_number_spec.rb +0 -41
  42. data/spec/filters/by_year_day_spec.rb +0 -35
  43. data/spec/frequencies/daily_spec.rb +0 -62
  44. data/spec/frequencies/monthly_spec.rb +0 -63
  45. data/spec/frequencies/simple_weekly_spec.rb +0 -32
  46. data/spec/frequencies/weekly_spec.rb +0 -92
  47. data/spec/frequencies/yearly_spec.rb +0 -54
  48. data/spec/generators/all_occurrences_spec.rb +0 -44
  49. data/spec/generators/by_set_position_spec.rb +0 -39
  50. data/spec/generators/generator_spec.rb +0 -110
  51. data/spec/rule_spec.rb +0 -2338
  52. data/spec/spec_helper.rb +0 -23
  53. data/spec/weekday_spec.rb +0 -34
@@ -1,62 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe RRule::Daily do
4
- let(:interval) { 1 }
5
- let(:context) do
6
- RRule::Context.new(
7
- { interval: interval },
8
- date,
9
- 'America/Los_Angeles'
10
- )
11
- end
12
- let(:filters) { [] }
13
- let(:generator) { RRule::AllOccurrences.new(context) }
14
- let(:timeset) { [{ hour: date.hour, minute: date.min, second: date.sec }] }
15
-
16
- before { context.rebuild(date.year, date.month) }
17
-
18
- describe '#next_occurrences' do
19
- subject(:frequency) { described_class.new(context, filters, generator, timeset) }
20
-
21
- context 'with an interval of one' do
22
- let(:date) { Time.zone.local(1997, 1, 1) }
23
-
24
- it 'returns sequential days' do
25
- expect(frequency.next_occurrences).to eql [Time.zone.local(1997, 1, 1)]
26
- expect(frequency.next_occurrences).to eql [Time.zone.local(1997, 1, 2)]
27
- expect(frequency.next_occurrences).to eql [Time.zone.local(1997, 1, 3)]
28
- end
29
- end
30
-
31
- context 'with an interval of two' do
32
- let(:interval) { 2 }
33
- let(:date) { Time.zone.local(1997, 1, 1) }
34
-
35
- it 'returns every other day' do
36
- expect(frequency.next_occurrences).to eql [Time.zone.local(1997, 1, 1)]
37
- expect(frequency.next_occurrences).to eql [Time.zone.local(1997, 1, 3)]
38
- expect(frequency.next_occurrences).to eql [Time.zone.local(1997, 1, 5)]
39
- end
40
- end
41
-
42
- context 'on the last day of February' do
43
- let(:date) { Time.zone.local(1997, 2, 28) }
44
-
45
- it 'goes into the next month' do
46
- expect(frequency.next_occurrences).to eql [Time.zone.local(1997, 2, 28)]
47
- expect(frequency.next_occurrences).to eql [Time.zone.local(1997, 3, 1)]
48
- expect(frequency.next_occurrences).to eql [Time.zone.local(1997, 3, 2)]
49
- end
50
- end
51
-
52
- context 'on the last day of the year' do
53
- let(:date) { Time.zone.local(1997, 12, 31) }
54
-
55
- it 'goes into the next year' do
56
- expect(frequency.next_occurrences).to eql [Time.zone.local(1997, 12, 31)]
57
- expect(frequency.next_occurrences).to eql [Time.zone.local(1998, 1, 1)]
58
- expect(frequency.next_occurrences).to eql [Time.zone.local(1998, 1, 2)]
59
- end
60
- end
61
- end
62
- end
@@ -1,63 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe RRule::Monthly do
4
- let(:interval) { 1 }
5
- let(:context) do
6
- RRule::Context.new(
7
- { interval: interval },
8
- date,
9
- 'America/Los_Angeles'
10
- )
11
- end
12
- let(:filters) { [RRule::ByMonthDay.new([date.day], context)] }
13
- let(:generator) { RRule::AllOccurrences.new(context) }
14
- let(:timeset) { [{ hour: date.hour, minute: date.min, second: date.sec }] }
15
-
16
- before { context.rebuild(date.year, date.month) }
17
-
18
- describe '#next_occurrences' do
19
- subject(:frequency) { described_class.new(context, filters, generator, timeset) }
20
-
21
- context 'with an interval of one' do
22
- let(:date) { Time.zone.local(1997, 1, 1) }
23
-
24
- it 'returns sequential months' do
25
- expect(frequency.next_occurrences).to eql [Time.zone.local(1997, 1, 1)]
26
- expect(frequency.next_occurrences).to eql [Time.zone.local(1997, 2, 1)]
27
- expect(frequency.next_occurrences).to eql [Time.zone.local(1997, 3, 1)]
28
- end
29
- end
30
-
31
- context 'with an interval of two' do
32
- let(:interval) { 2 }
33
- let(:date) { Time.zone.local(1997, 1, 1) }
34
-
35
- it 'returns every other month' do
36
- expect(frequency.next_occurrences).to eql [Time.zone.local(1997, 1, 1)]
37
- expect(frequency.next_occurrences).to eql [Time.zone.local(1997, 3, 1)]
38
- expect(frequency.next_occurrences).to eql [Time.zone.local(1997, 5, 1)]
39
- end
40
- end
41
-
42
- context 'on the last day of February' do
43
- let(:date) { Time.zone.local(1997, 2, 28) }
44
-
45
- it 'returns the next three months' do
46
- expect(frequency.next_occurrences).to eql [Time.zone.local(1997, 2, 28)]
47
- expect(frequency.next_occurrences).to eql [Time.zone.local(1997, 3, 28)]
48
- expect(frequency.next_occurrences).to eql [Time.zone.local(1997, 4, 28)]
49
- end
50
- end
51
-
52
- context 'on the last day of the year' do
53
- let(:date) { Time.zone.local(1997, 12, 31) }
54
-
55
- it 'returns empty arrays for periods with no matching occurrences' do
56
- expect(frequency.next_occurrences).to eql [Time.zone.local(1997, 12, 31)]
57
- expect(frequency.next_occurrences).to eql [Time.zone.local(1998, 1, 31)]
58
- expect(frequency.next_occurrences).to eql []
59
- expect(frequency.next_occurrences).to eql [Time.zone.local(1998, 3, 31)]
60
- end
61
- end
62
- end
63
- end
@@ -1,32 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe RRule::SimpleWeekly do
4
- let(:context) { RRule::Context.new({ interval: interval }, date, 'America/Los_Angeles') }
5
- let(:frequency) { described_class.new(context, nil, generator, timeset) }
6
- let(:generator) { RRule::AllOccurrences.new(context) }
7
- let(:timeset) { [{ hour: date.hour, minute: date.min, second: date.sec }] }
8
-
9
- describe '#next_occurrences' do
10
- let(:date) { Time.zone.local(1997, 1, 1) }
11
-
12
- context 'with an interval of 1' do
13
- let(:interval) { 1 }
14
-
15
- it 'returns occurrences every week' do
16
- expect(frequency.next_occurrences).to eql [Time.zone.local(1997, 1, 1)]
17
- expect(frequency.next_occurrences).to eql [Time.zone.local(1997, 1, 8)]
18
- expect(frequency.next_occurrences).to eql [Time.zone.local(1997, 1, 15)]
19
- end
20
- end
21
-
22
- context 'with an interval of 2' do
23
- let(:interval) { 2 }
24
-
25
- it 'returns occurrences every other week' do
26
- expect(frequency.next_occurrences).to eql [Time.zone.local(1997, 1, 1)]
27
- expect(frequency.next_occurrences).to eql [Time.zone.local(1997, 1, 15)]
28
- expect(frequency.next_occurrences).to eql [Time.zone.local(1997, 1, 29)]
29
- end
30
- end
31
- end
32
- end
@@ -1,92 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe RRule::Weekly do
4
- let(:interval) { 1 }
5
- let(:context) do
6
- RRule::Context.new(
7
- { interval: interval, wkst: 1 },
8
- date,
9
- 'America/Los_Angeles'
10
- )
11
- end
12
- let(:filters) { [RRule::ByWeekDay.new([RRule::Weekday.new(date.wday)], context)] }
13
- let(:generator) { RRule::AllOccurrences.new(context) }
14
- let(:timeset) { [{ hour: date.hour, minute: date.min, second: date.sec }] }
15
-
16
- before { context.rebuild(date.year, date.month) }
17
-
18
- describe '#next_occurrences' do
19
- subject(:frequency) { described_class.new(context, filters, generator, timeset) }
20
-
21
- context 'with an interval of one' do
22
- let(:date) { Time.zone.local(1997, 1, 1) }
23
-
24
- it 'returns sequential weeks' do
25
- expect(frequency.next_occurrences).to eql [Time.zone.local(1997, 1, 1)]
26
- expect(frequency.next_occurrences).to eql [Time.zone.local(1997, 1, 8)]
27
- expect(frequency.next_occurrences).to eql [Time.zone.local(1997, 1, 15)]
28
- end
29
- end
30
-
31
- context 'with an interval of two' do
32
- let(:interval) { 2 }
33
- let(:date) { Time.zone.local(1997, 1, 1) }
34
-
35
- it 'returns every other week' do
36
- expect(frequency.next_occurrences).to eql [Time.zone.local(1997, 1, 1)]
37
- expect(frequency.next_occurrences).to eql [Time.zone.local(1997, 1, 15)]
38
- expect(frequency.next_occurrences).to eql [Time.zone.local(1997, 1, 29)]
39
- end
40
- end
41
-
42
- context 'on the first day of the year with five days left in the week' do
43
- let(:date) { Time.zone.local(1997, 1, 1) }
44
-
45
- it 'returns the next three weeks' do
46
- expect(frequency.next_occurrences).to eql [Time.zone.local(1997, 1, 1)]
47
- expect(frequency.next_occurrences).to eql [Time.zone.local(1997, 1, 8)]
48
- expect(frequency.next_occurrences).to eql [Time.zone.local(1997, 1, 15)]
49
- end
50
- end
51
-
52
- context 'on a day in the first month with two days left in the week' do
53
- let(:date) { Time.zone.local(1997, 1, 25) }
54
-
55
- it 'returns the next three weeks' do
56
- expect(frequency.next_occurrences).to eql [Time.zone.local(1997, 1, 25)]
57
- expect(frequency.next_occurrences).to eql [Time.zone.local(1997, 2, 1)]
58
- expect(frequency.next_occurrences).to eql [Time.zone.local(1997, 2, 8)]
59
- end
60
- end
61
-
62
- context 'on a day in the next month with six days left in the week' do
63
- let(:date) { Time.zone.local(1997, 2, 25) }
64
-
65
- it 'returns the next three weeks' do
66
- expect(frequency.next_occurrences).to eql [Time.zone.local(1997, 2, 25)]
67
- expect(frequency.next_occurrences).to eql [Time.zone.local(1997, 3, 4)]
68
- expect(frequency.next_occurrences).to eql [Time.zone.local(1997, 3, 11)]
69
- end
70
- end
71
-
72
- context 'on the last day of February' do
73
- let(:date) { Time.zone.local(1997, 2, 28) }
74
-
75
- it 'returns the next three weeks' do
76
- expect(frequency.next_occurrences).to eql [Time.zone.local(1997, 2, 28)]
77
- expect(frequency.next_occurrences).to eql [Time.zone.local(1997, 3, 7)]
78
- expect(frequency.next_occurrences).to eql [Time.zone.local(1997, 3, 14)]
79
- end
80
- end
81
-
82
- context 'on the last day of the year' do
83
- let(:date) { Time.zone.local(1997, 12, 31) }
84
-
85
- it 'returns the next three weeks' do
86
- expect(frequency.next_occurrences).to eql [Time.zone.local(1997, 12, 31)]
87
- expect(frequency.next_occurrences).to eql [Time.zone.local(1998, 1, 7)]
88
- expect(frequency.next_occurrences).to eql [Time.zone.local(1998, 1, 14)]
89
- end
90
- end
91
- end
92
- end
@@ -1,54 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe RRule::Yearly do
4
- let(:interval) { 1 }
5
- let(:context) do
6
- RRule::Context.new(
7
- { interval: interval, wkst: 1 },
8
- date,
9
- 'America/Los_Angeles'
10
- )
11
- end
12
- let(:filters) { [RRule::ByMonth.new([date.month], context), RRule::ByMonthDay.new([date.day], context)] }
13
- let(:generator) { RRule::AllOccurrences.new(context) }
14
- let(:timeset) { [{ hour: date.hour, minute: date.min, second: date.sec }] }
15
-
16
- before(:each) { context.rebuild(date.year, date.month) }
17
-
18
- describe '#next_occurrences' do
19
- subject(:frequency) { described_class.new(context, filters, generator, timeset) }
20
-
21
- context 'on the first day of the year' do
22
- let(:date) { Time.zone.local(1997, 1, 1) }
23
-
24
- it 'returns the next three years' do
25
- expect(frequency.next_occurrences).to eql [Time.zone.local(1997, 1, 1)]
26
- expect(frequency.next_occurrences).to eql [Time.zone.local(1998, 1, 1)]
27
- expect(frequency.next_occurrences).to eql [Time.zone.local(1999, 1, 1)]
28
- end
29
- end
30
-
31
- context 'on the last day of February in a leap year' do
32
- let(:date) { Time.zone.local(2000, 2, 29) }
33
-
34
- it 'skips non-leap years' do
35
- expect(frequency.next_occurrences).to eql [Time.zone.local(2000, 2, 29)]
36
- expect(frequency.next_occurrences).to eql []
37
- expect(frequency.next_occurrences).to eql []
38
- expect(frequency.next_occurrences).to eql []
39
- expect(frequency.next_occurrences).to eql [Time.zone.local(2004, 2, 29)]
40
- end
41
- end
42
-
43
- context 'with an interval of two' do
44
- let(:interval) { 2 }
45
- let(:date) { Time.zone.local(1997, 1, 1) }
46
-
47
- it 'returns every other year' do
48
- expect(frequency.next_occurrences).to eql [Time.zone.local(1997, 1, 1)]
49
- expect(frequency.next_occurrences).to eql [Time.zone.local(1999, 1, 1)]
50
- expect(frequency.next_occurrences).to eql [Time.zone.local(2001, 1, 1)]
51
- end
52
- end
53
- end
54
- end
@@ -1,44 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe RRule::AllOccurrences do
4
- let(:context) do
5
- RRule::Context.new(
6
- { interval: 1, wkst: 1 },
7
- Time.parse('Wed Jan 1 00:00:00 PST 1997'),
8
- 'America/Los_Angeles'
9
- )
10
- end
11
-
12
- around(:each) do |example|
13
- Time.use_zone('America/Los_Angeles') do
14
- example.run
15
- end
16
- end
17
-
18
- before(:each) { context.rebuild(1997, 1) }
19
-
20
- describe '#combine_dates_and_times' do
21
- subject { described_class.new(context).combine_dates_and_times(dates, times)}
22
-
23
- context 'with a single date and time' do
24
- let(:dates) { [0] }
25
- let(:times) { [{ hour: 12, minute: 30, second: 15 }] }
26
-
27
- it { is_expected.to match_array [Time.parse('Wed Jan 1 12:30:15 PST 1997')] }
28
- end
29
-
30
- context 'with multiple dates and a single time' do
31
- let(:dates) { [0, 15] }
32
- let(:times) { [{ hour: 12, minute: 30, second: 15 }] }
33
-
34
- it { is_expected.to match_array [Time.parse('Wed Jan 1 12:30:15 PST 1997'), Time.parse('Thu Jan 16 12:30:15 PST 1997')] }
35
- end
36
-
37
- context 'with a single date and multiple times' do
38
- let(:dates) { [0] }
39
- let(:times) { [{ hour: 12, minute: 30, second: 15 }, { hour: 18, minute: 45, second: 20 }] }
40
-
41
- it { is_expected.to match_array [Time.parse('Wed Jan 1 12:30:15 PST 1997'), Time.parse('Wed Jan 1 18:45:20 PST 1997')] }
42
- end
43
- end
44
- end
@@ -1,39 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe RRule::BySetPosition do
4
- let(:context) do
5
- RRule::Context.new(
6
- { interval: 1, wkst: 1 },
7
- Time.parse('Wed Jan 1 00:00:00 PST 1997'),
8
- 'America/Los_Angeles'
9
- )
10
- end
11
-
12
- around(:each) do |example|
13
- Time.use_zone('America/Los_Angeles') do
14
- example.run
15
- end
16
- end
17
-
18
- before(:each) { context.rebuild(1997, 1) }
19
-
20
- describe '#combine_dates_and_times' do
21
- subject { described_class.new(positions, context).combine_dates_and_times(dates, times)}
22
-
23
- context 'with a single set position' do
24
- let(:positions) { [0] }
25
- let(:dates) { [0, 1, 2, 3, 4] }
26
- let(:times) { [{ hour: 12, minute: 30, second: 15 }] }
27
-
28
- it { is_expected.to match_array [Time.parse('Wed Jan 1 12:30:15 PST 1997')] }
29
- end
30
-
31
- context 'with multiple set positions' do
32
- let(:positions) { [1, 3] }
33
- let(:dates) { [0, 1, 2, 3, 4] }
34
- let(:times) { [{ hour: 12, minute: 30, second: 15 }] }
35
-
36
- it { is_expected.to match_array [Time.parse('Wed Jan 1 12:30:15 PST 1997'), Time.parse('Fri Jan 3 12:30:15 PST 1997')] }
37
- end
38
- end
39
- end
@@ -1,110 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe RRule::Generator do
4
- let(:context) do
5
- RRule::Context.new(
6
- { interval: 1, wkst: 1 },
7
- Time.parse('Wed Jan 1 00:00:00 PST 1997'),
8
- 'America/Los_Angeles'
9
- )
10
- end
11
-
12
- around(:each) do |example|
13
- Time.use_zone('America/Los_Angeles') do
14
- example.run
15
- end
16
- end
17
-
18
- before(:each) { context.rebuild(1997, 1) }
19
-
20
- describe '#process_timeset' do
21
- describe "single timeset" do
22
- subject { described_class.new(context).process_timeset(date, timeset)}
23
-
24
- context 'with a timeset with only 1 set' do
25
- let(:date) { Time.parse('Wed Jan 1 00:11:22 PST 1997') }
26
- let(:timeset) { [{ hour: 12, minute: 30, second: 15 }] }
27
-
28
- it { is_expected.to match_array [Time.parse('Wed Jan 1 12:30:15 PST 1997')] }
29
- end
30
-
31
- context 'with multiple hours in the timeset' do
32
- let(:date) { Time.parse('Wed Jan 1 00:11:22 PST 1997') }
33
- let(:timeset) { [{ hour: [12, 15], minute: 30, second: 15 }] }
34
-
35
- it { is_expected.to match_array [Time.parse('Wed Jan 1 12:30:15 PST 1997'), Time.parse('Wed Jan 1 15:30:15 PST 1997')] }
36
- end
37
-
38
- context 'with multiple minutes in the timeset' do
39
- let(:date) { Time.parse('Wed Jan 1 00:11:22 PST 1997') }
40
- let(:timeset) { [{ hour: [12], minute: [15, 30], second: 15 }] }
41
-
42
- it { is_expected.to match_array [Time.parse('Wed Jan 1 12:15:15 PST 1997'), Time.parse('Wed Jan 1 12:30:15 PST 1997')] }
43
- end
44
-
45
- context 'with multiple seconds in the timeset' do
46
- let(:date) { Time.parse('Wed Jan 1 00:11:22 PST 1997') }
47
- let(:timeset) { [{ hour: [12], minute: [30], second: [15, 59] }] }
48
-
49
- it { is_expected.to match_array [Time.parse('Wed Jan 1 12:30:15 PST 1997'), Time.parse('Wed Jan 1 12:30:59 PST 1997')] }
50
- end
51
-
52
- context 'with multiple hours, minutes, and seconds in the timeset' do
53
- let(:date) { Time.parse('Wed Jan 1 00:11:22 PST 1997') }
54
- let(:timeset) { [{ hour: [12, 20], minute: [30, 55], second: [15, 59] }] }
55
-
56
- it { is_expected.to eq [
57
- Time.parse('Wed Jan 1 12:30:15 PST 1997'),
58
- Time.parse('Wed Jan 1 12:30:59 PST 1997'),
59
- Time.parse('Wed Jan 1 12:55:15 PST 1997'),
60
- Time.parse('Wed Jan 1 12:55:59 PST 1997'),
61
- Time.parse('Wed Jan 1 20:30:15 PST 1997'),
62
- Time.parse('Wed Jan 1 20:30:59 PST 1997'),
63
- Time.parse('Wed Jan 1 20:55:15 PST 1997'),
64
- Time.parse('Wed Jan 1 20:55:59 PST 1997'),
65
- ] }
66
- end
67
-
68
- context 'with multiple hours, minutes, and seconds in the timeset, unsorted' do
69
- let(:date) { Time.parse('Wed Jan 1 00:11:22 PST 1997') }
70
- let(:timeset) { [{ hour: [20, 12], minute: [55, 30], second: [59, 15] }] }
71
-
72
- it { is_expected.to eq [
73
- Time.parse('Wed Jan 1 12:30:15 PST 1997'),
74
- Time.parse('Wed Jan 1 12:30:59 PST 1997'),
75
- Time.parse('Wed Jan 1 12:55:15 PST 1997'),
76
- Time.parse('Wed Jan 1 12:55:59 PST 1997'),
77
- Time.parse('Wed Jan 1 20:30:15 PST 1997'),
78
- Time.parse('Wed Jan 1 20:30:59 PST 1997'),
79
- Time.parse('Wed Jan 1 20:55:15 PST 1997'),
80
- Time.parse('Wed Jan 1 20:55:59 PST 1997'),
81
- ] }
82
- end
83
- end
84
- end
85
-
86
- describe "multiple timesets" do
87
- subject { described_class.new(context).process_timeset(date, timeset)}
88
-
89
- context 'with multiple timsets' do
90
- let(:date) { Time.parse('Wed Jan 1 00:11:22 PST 1997') }
91
- let(:timeset) { [{ hour: 12, minute: 30, second: 15 }, { hour: 18, minute: 45, second: 20 }] }
92
-
93
- it { is_expected.to eq [Time.parse('Wed Jan 1 12:30:15 PST 1997'), Time.parse('Wed Jan 1 18:45:20 PST 1997')] }
94
- end
95
-
96
- context 'with multiple timsets with multiple hour sets' do
97
- let(:date) { Time.parse('Wed Jan 1 00:11:22 PST 1997') }
98
- let(:timeset) { [{ hour: [12, 20], minute: 30, second: [15, 45] }, { hour: 18, minute: [22, 45], second: 20 }] }
99
-
100
- it { is_expected.to eq [
101
- Time.parse('Wed Jan 1 12:30:15 PST 1997'),
102
- Time.parse('Wed Jan 1 12:30:45 PST 1997'),
103
- Time.parse('Wed Jan 1 20:30:15 PST 1997'),
104
- Time.parse('Wed Jan 1 20:30:45 PST 1997'),
105
- Time.parse('Wed Jan 1 18:22:20 PST 1997'),
106
- Time.parse('Wed Jan 1 18:45:20 PST 1997')
107
- ] }
108
- end
109
- end
110
- end