icalendar-recurrence 1.0.1 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: cd6d607af6031098dcd81c89886adb269c33cc75
4
+ data.tar.gz: 4e4958d4dcc5707113b7783693f19684350a4b58
5
+ SHA512:
6
+ metadata.gz: 14fed0a81692c85a01a1fb71e004747fe4e2bc13811f40ee78ddbdfaf36bb94af14419e522b495eb3a07c578ec89e468e9d9de72efe6afe486dc1a0c4e735f20
7
+ data.tar.gz: 332faa2646e46d0fc995e3143a480eb1bb0932514adca086d0f5782804222432df461e954f7422ac8be27983658ca939aa7a5d4d657959dee6d50bc7762113da
data/.rspec CHANGED
@@ -1,3 +1,2 @@
1
1
  --color
2
2
  --format progress
3
- <%= "--format Nc" if RUBY_PLATFORM.match(/darwin/) %>
@@ -0,0 +1,7 @@
1
+ # icalendar-recurrence CHANGELOG
2
+
3
+ ## 1.1.0 (July 8, 2015)
4
+
5
+ - Add support for getting all occurrences (issue #7)
6
+ *Espen Antonsen (@espen)*
7
+ - Delgate ical RRULE string parsing to IceCube (also, upgrade to 0.13.0)
@@ -18,14 +18,15 @@ Gem::Specification.new do |spec|
18
18
  spec.require_paths = ["lib"]
19
19
 
20
20
  spec.add_runtime_dependency 'icalendar', '~> 2.0'
21
- spec.add_runtime_dependency 'ice_cube', '~> 0.11.1'
21
+ spec.add_runtime_dependency 'ice_cube', '~> 0.13.0'
22
22
 
23
+ spec.add_development_dependency 'activesupport', '~> 4.0.4'
24
+ spec.add_development_dependency 'awesome_print'
25
+ spec.add_development_dependency 'pry'
26
+ spec.add_development_dependency 'bundler', '~> 1.3'
27
+ spec.add_development_dependency 'guard-rspec', '~> 4.2.8'
23
28
  spec.add_development_dependency 'rake', '~> 10.2.1'
24
29
  spec.add_development_dependency 'rspec', '~> 2.14.1'
25
- spec.add_development_dependency 'bundler', '~> 1.3'
26
- spec.add_development_dependency 'tzinfo', '~> 0.3'
27
30
  spec.add_development_dependency 'timecop', '~> 0.6.3'
28
- spec.add_development_dependency 'guard-rspec', '~> 4.2.8'
29
- spec.add_development_dependency 'activesupport', '~> 4.0.4'
30
- spec.add_development_dependency 'rspec-nc'
31
+ spec.add_development_dependency 'tzinfo', '~> 0.3'
31
32
  end
@@ -40,6 +40,14 @@ module Icalendar
40
40
  end
41
41
  end
42
42
 
43
+ def all_occurrences
44
+ ice_cube_occurrences = ice_cube_schedule.all_occurrences
45
+
46
+ ice_cube_occurrences.map do |occurrence|
47
+ convert_ice_cube_occurrence(occurrence)
48
+ end
49
+ end
50
+
43
51
  def convert_ice_cube_occurrence(ice_cube_occurrence)
44
52
  if timezone
45
53
  begin
@@ -53,7 +61,7 @@ module Icalendar
53
61
 
54
62
  start_time ||= ice_cube_occurrence.start_time
55
63
  end_time ||= ice_cube_occurrence.end_time
56
-
64
+
57
65
  Icalendar::Recurrence::Occurrence.new(start_time, end_time)
58
66
  end
59
67
 
@@ -63,7 +71,7 @@ module Icalendar
63
71
  schedule.end_time = end_time
64
72
 
65
73
  rrules.each do |rrule|
66
- ice_cube_recurrence_rule = convert_rrule_to_ice_cube_recurrence_rule(rrule)
74
+ ice_cube_recurrence_rule = IceCube::Rule.from_ical(rrule.value_ical)
67
75
  schedule.add_recurrence_rule(ice_cube_recurrence_rule)
68
76
  end
69
77
 
@@ -74,88 +82,15 @@ module Icalendar
74
82
 
75
83
  schedule
76
84
  end
85
+ end
86
+
87
+ def convert_duration_to_seconds(ical_duration)
88
+ return 0 unless ical_duration
77
89
 
78
- def transform_byday_to_hash(byday_entries)
79
- hashable_array = Array(byday_entries).map {|byday| convert_byday_to_ice_cube_day_of_week_hash(byday) }.flatten(1)
80
- hash = Hash[*hashable_array]
81
-
82
- if hash.values.include?([0]) # byday interval not specified (e.g., BYDAY=SA not BYDAY=1SA)
83
- hash.keys
84
- else
85
- hash
86
- end
87
- end
88
-
89
- # private
90
-
91
-
92
- def convert_rrule_to_ice_cube_recurrence_rule(rrule)
93
- ice_cube_recurrence_rule = base_ice_cube_recurrence_rule(rrule.frequency, rrule.interval)
94
-
95
- ice_cube_recurrence_rule.tap do |r|
96
- days = transform_byday_to_hash(rrule.by_day)
97
-
98
- r.month_of_year(rrule.by_month) unless rrule.by_month.nil?
99
- r.day_of_month(rrule.by_month_day.map(&:to_i)) unless rrule.by_month_day.nil?
100
- r.day_of_week(days) if days.is_a?(Hash) and !days.empty?
101
- r.day(days) if days.is_a?(Array) and !days.empty?
102
- r.until(TimeUtil.to_time(rrule.until)) if rrule.until
103
- r.count(rrule.count)
104
- end
105
-
106
- ice_cube_recurrence_rule
107
- end
108
-
109
- def base_ice_cube_recurrence_rule(frequency, interval)
110
- interval ||= 1
111
- if frequency == "DAILY"
112
- IceCube::DailyRule.new(interval)
113
- elsif frequency == "WEEKLY"
114
- IceCube::WeeklyRule.new(interval)
115
- elsif frequency == "MONTHLY"
116
- IceCube::MonthlyRule.new(interval)
117
- elsif frequency == "YEARLY"
118
- IceCube::YearlyRule.new(interval)
119
- else
120
- raise "Unknown frequency: #{rrule.frequency}"
121
- end
122
- end
123
-
124
- def convert_byday_to_ice_cube_day_of_week_hash(ical_byday)
125
- data = parse_ical_byday(ical_byday)
126
- day_code = data.fetch(:day_code)
127
- position = data.fetch(:position)
128
-
129
- day_symbol = case day_code.to_s
130
- when "SU" then :sunday
131
- when "MO" then :monday
132
- when "TU" then :tuesday
133
- when "WE" then :wednesday
134
- when "TH" then :thursday
135
- when "FR" then :friday
136
- when "SA" then :saturday
137
- else
138
- raise ArgumentError.new "Unexpected ical_day: #{ical_day.inspect}"
139
- end
140
-
141
- [day_symbol, Array(position)]
142
- end
143
-
144
- # Parses ICAL BYDAY value to day and position array
145
- # 1SA => {day_code: "SA", position: 1}
146
- # MO => {day_code: "MO", position: nil
147
- def parse_ical_byday(ical_byday)
148
- match = ical_byday.match(/(\d*)([A-Z]{2})/)
149
- {day_code: match[2], position: match[1].to_i}
150
- end
151
-
152
- def convert_duration_to_seconds(ical_duration)
153
- return 0 unless ical_duration
154
-
155
- conversion_rates = { seconds: 1, minutes: 60, hours: 3600, days: 86400, weeks: 604800 }
156
- seconds = conversion_rates.inject(0) { |sum, (unit, multiplier)| sum + ical_duration[unit] * multiplier }
157
- seconds * (ical_duration.past ? -1 : 1)
158
- end
90
+ conversion_rates = { seconds: 1, minutes: 60, hours: 3600, days: 86400, weeks: 604800 }
91
+ seconds = conversion_rates.inject(0) { |sum, (unit, multiplier)| sum + ical_duration[unit] * multiplier }
92
+ seconds * (ical_duration.past ? -1 : 1)
159
93
  end
94
+
160
95
  end
161
- end
96
+ end
@@ -30,15 +30,15 @@ module Icalendar
30
30
  end
31
31
  end
32
32
 
33
- # Calculates offset for given timezone ID (tzid). Optional, specify a
33
+ # Calculates offset for given timezone ID (tzid). Optional, specify a
34
34
  # moment in time to calulcate this offset. If no moment is specified,
35
35
  # use the current time.
36
- #
36
+ #
37
37
  # # If done before daylight savings:
38
38
  # TimeUtil.timezone_offset("America/Los_Angeles") => -08:00
39
39
  # # Or after:
40
40
  # TimeUtil.timezone_offset("America/Los_Angeles", moment: Time.parse("2014-04-01")) => -07:00
41
- #
41
+ #
42
42
  def timezone_offset(tzid, options = {})
43
43
  tzid = Array(tzid).first
44
44
  options = {moment: Time.now}.merge(options)
@@ -64,7 +64,7 @@ module Icalendar
64
64
  end
65
65
 
66
66
  def supported_datetime_object?(time_object)
67
- time_object.is_a?(Icalendar::Values::DateTime)
67
+ time_object.is_a?(Icalendar::Values::DateTime)
68
68
  end
69
69
 
70
70
  def supported_time_object?(time_object)
@@ -72,7 +72,7 @@ module Icalendar
72
72
  end
73
73
 
74
74
  # Replaces the existing offset with one associated with given TZID. Does
75
- # not change hour of day, only the offset. For example, if given a UTC
75
+ # not change hour of day, only the offset. For example, if given a UTC
76
76
  # time of 8am, the returned time object will still be 8am but in another
77
77
  # timezone. See test for working examples.
78
78
  def force_zone(time, tzid)
@@ -1,5 +1,5 @@
1
1
  module Icalendar
2
2
  module Recurrence
3
- VERSION = "1.0.1"
3
+ VERSION = "1.1.0"
4
4
  end
5
5
  end
@@ -1,20 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe Icalendar::Recurrence::Schedule do
4
- describe "#transform_byday_to_hash" do
5
- it "returns an array of days when no monthly interval is set" do
6
- byday = ["MO", "WE", "FR"]
7
- schedule = Schedule.new(nil)
8
- expect(schedule.transform_byday_to_hash(byday)).to eq([:monday, :wednesday, :friday])
9
- end
10
-
11
- it "returns hash with day of week and interval" do
12
- byday = ["1SA"]
13
- schedule = Schedule.new(nil);
14
- expect(schedule.transform_byday_to_hash(byday)).to eq({saturday: [1]})
15
- end
16
- end
17
-
18
4
  describe "#occurrences_between" do
19
5
  let(:example_occurrence) do
20
6
  daily_event = example_event :daily
@@ -40,13 +26,24 @@ describe Icalendar::Recurrence::Schedule do
40
26
  end
41
27
  end
42
28
  end
29
+
30
+ describe "#all_occurrences" do
31
+ let(:example_occurrences) do
32
+ weekly_event = example_event :weekly_with_count
33
+ schedule = Schedule.new(weekly_event)
34
+ schedule.all_occurrences
35
+ end
43
36
 
44
- describe "#parse_ical_byday" do
45
- let(:schedule) { Schedule.new(nil) }
37
+ let(:example_occurrence) { example_occurrences.first }
46
38
 
47
- it "returns a hash of data" do
48
- expect(schedule.parse_ical_byday("1SA")).to eq({day_code: "SA", position: 1})
49
- expect(schedule.parse_ical_byday("MO")).to eq({day_code: "MO", position: 0})
39
+ it "returns object that responds to start_time and end_time" do
40
+ expect(example_occurrence).to respond_to :start_time
41
+ expect(example_occurrence).to respond_to :end_time
42
+ end
43
+
44
+ it "returns all occurrences" do
45
+ expect(example_occurrences.count).to eq(151)
50
46
  end
51
47
  end
52
- end
48
+
49
+ end
@@ -25,7 +25,7 @@ describe TimeUtil do
25
25
  pst_midnight = Time.parse("2014-01-27T12:00:00-08:00")
26
26
 
27
27
  zoned_datetime = Icalendar::Values::DateTime.new(utc_midnight, "tzid" => "America/Los_Angeles")
28
-
28
+
29
29
  expect(TimeUtil.to_time(zoned_datetime)).to eq(pst_midnight)
30
30
  end
31
31
 
@@ -59,7 +59,7 @@ describe TimeUtil do
59
59
  end
60
60
 
61
61
  it "returns nil when given an unknown timezone" do
62
- expect(TimeUtil.timezone_offset("Foo/Bar")).to eq(nil)
62
+ expect(TimeUtil.timezone_offset("Foo/Bar")).to eq(nil)
63
63
  end
64
64
 
65
65
  it "removes quotes from given TZID" do
@@ -81,8 +81,8 @@ describe TimeUtil do
81
81
 
82
82
  it "handles daylight savings" do
83
83
  # FYI, clocks turn forward an hour on Nov 2 at 9:00:00 UTC
84
- minute_before_clocks_change = Time.parse("Nov 2 at 08:59:00 UTC") # on west coast
85
- minute_after_clocks_change = Time.parse("Nov 2 at 09:01:00 UTC") # on west coast
84
+ minute_before_clocks_change = Time.parse("2014-11-02 at 08:59:00 UTC") # on west coast
85
+ minute_after_clocks_change = Time.parse("2014-11-02 at 09:01:00 UTC") # on west coast
86
86
 
87
87
  expect(TimeUtil.timezone_offset("America/Los_Angeles", moment: minute_before_clocks_change)).to eq("-07:00")
88
88
  expect(TimeUtil.timezone_offset("America/Los_Angeles", moment: minute_after_clocks_change)).to eq("-08:00")
@@ -134,4 +134,4 @@ describe TimeUtil do
134
134
  expect(eight_am_local.utc?).to eq(false)
135
135
  end
136
136
  end
137
- end
137
+ end
@@ -1,6 +1,11 @@
1
1
  require 'support/helpers'
2
+
3
+ # Support gems
4
+ require 'awesome_print'
2
5
  require 'timecop'
6
+ require 'pry'
3
7
 
8
+ # Gem under test
4
9
  require 'icalendar/recurrence'
5
10
 
6
11
  include Icalendar::Recurrence
@@ -0,0 +1,23 @@
1
+ BEGIN:VCALENDAR
2
+ X-WR-CALNAME:Test Public
3
+ X-WR-CALID:f512e378-050c-4366-809a-ef471ce45b09:101165
4
+ PRODID:Zimbra-Calendar-Provider
5
+ VERSION:2.0
6
+ METHOD:PUBLISH
7
+ BEGIN:VEVENT
8
+ UID:efcb99ae-d540-419c-91fa-42cc2bd9d302
9
+ RRULE:FREQ=WEEKLY;INTERVAL=1;COUNT=151
10
+ SUMMARY:Every week
11
+ X-ALT-DESC;FMTTYPE=text/html:<html><body></body></html>
12
+ ORGANIZER;CN=Jordan Raine:mailto:foo@sfu.ca
13
+ DTSTART;VALUE=DATE:20140210
14
+ STATUS:CONFIRMED
15
+ CLASS:PUBLIC
16
+ X-MICROSOFT-CDO-ALLDAYEVENT:TRUE
17
+ X-MICROSOFT-CDO-INTENDEDSTATUS:FREE
18
+ TRANSP:TRANSPARENT
19
+ LAST-MODIFIED:20140113T200625Z
20
+ DTSTAMP:20140113T200625Z
21
+ SEQUENCE:0
22
+ END:VEVENT
23
+ END:VCALENDAR
metadata CHANGED
@@ -1,176 +1,169 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: icalendar-recurrence
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
5
- prerelease:
4
+ version: 1.1.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - Jordan Raine
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2014-10-14 00:00:00.000000000 Z
11
+ date: 2015-07-07 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: icalendar
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ~>
17
+ - - "~>"
20
18
  - !ruby/object:Gem::Version
21
19
  version: '2.0'
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ~>
24
+ - - "~>"
28
25
  - !ruby/object:Gem::Version
29
26
  version: '2.0'
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: ice_cube
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
- - - ~>
31
+ - - "~>"
36
32
  - !ruby/object:Gem::Version
37
- version: 0.11.1
33
+ version: 0.13.0
38
34
  type: :runtime
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
- - - ~>
38
+ - - "~>"
44
39
  - !ruby/object:Gem::Version
45
- version: 0.11.1
40
+ version: 0.13.0
46
41
  - !ruby/object:Gem::Dependency
47
- name: rake
42
+ name: activesupport
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
- - - ~>
45
+ - - "~>"
52
46
  - !ruby/object:Gem::Version
53
- version: 10.2.1
47
+ version: 4.0.4
54
48
  type: :development
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
- - - ~>
52
+ - - "~>"
60
53
  - !ruby/object:Gem::Version
61
- version: 10.2.1
54
+ version: 4.0.4
62
55
  - !ruby/object:Gem::Dependency
63
- name: rspec
56
+ name: awesome_print
64
57
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
58
  requirements:
67
- - - ~>
59
+ - - ">="
68
60
  - !ruby/object:Gem::Version
69
- version: 2.14.1
61
+ version: '0'
70
62
  type: :development
71
63
  prerelease: false
72
64
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
65
  requirements:
75
- - - ~>
66
+ - - ">="
76
67
  - !ruby/object:Gem::Version
77
- version: 2.14.1
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: pry
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
78
83
  - !ruby/object:Gem::Dependency
79
84
  name: bundler
80
85
  requirement: !ruby/object:Gem::Requirement
81
- none: false
82
86
  requirements:
83
- - - ~>
87
+ - - "~>"
84
88
  - !ruby/object:Gem::Version
85
89
  version: '1.3'
86
90
  type: :development
87
91
  prerelease: false
88
92
  version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
93
  requirements:
91
- - - ~>
94
+ - - "~>"
92
95
  - !ruby/object:Gem::Version
93
96
  version: '1.3'
94
97
  - !ruby/object:Gem::Dependency
95
- name: tzinfo
98
+ name: guard-rspec
96
99
  requirement: !ruby/object:Gem::Requirement
97
- none: false
98
100
  requirements:
99
- - - ~>
101
+ - - "~>"
100
102
  - !ruby/object:Gem::Version
101
- version: '0.3'
103
+ version: 4.2.8
102
104
  type: :development
103
105
  prerelease: false
104
106
  version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
107
  requirements:
107
- - - ~>
108
+ - - "~>"
108
109
  - !ruby/object:Gem::Version
109
- version: '0.3'
110
+ version: 4.2.8
110
111
  - !ruby/object:Gem::Dependency
111
- name: timecop
112
+ name: rake
112
113
  requirement: !ruby/object:Gem::Requirement
113
- none: false
114
114
  requirements:
115
- - - ~>
115
+ - - "~>"
116
116
  - !ruby/object:Gem::Version
117
- version: 0.6.3
117
+ version: 10.2.1
118
118
  type: :development
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
- none: false
122
121
  requirements:
123
- - - ~>
122
+ - - "~>"
124
123
  - !ruby/object:Gem::Version
125
- version: 0.6.3
124
+ version: 10.2.1
126
125
  - !ruby/object:Gem::Dependency
127
- name: guard-rspec
126
+ name: rspec
128
127
  requirement: !ruby/object:Gem::Requirement
129
- none: false
130
128
  requirements:
131
- - - ~>
129
+ - - "~>"
132
130
  - !ruby/object:Gem::Version
133
- version: 4.2.8
131
+ version: 2.14.1
134
132
  type: :development
135
133
  prerelease: false
136
134
  version_requirements: !ruby/object:Gem::Requirement
137
- none: false
138
135
  requirements:
139
- - - ~>
136
+ - - "~>"
140
137
  - !ruby/object:Gem::Version
141
- version: 4.2.8
138
+ version: 2.14.1
142
139
  - !ruby/object:Gem::Dependency
143
- name: activesupport
140
+ name: timecop
144
141
  requirement: !ruby/object:Gem::Requirement
145
- none: false
146
142
  requirements:
147
- - - ~>
143
+ - - "~>"
148
144
  - !ruby/object:Gem::Version
149
- version: 4.0.4
145
+ version: 0.6.3
150
146
  type: :development
151
147
  prerelease: false
152
148
  version_requirements: !ruby/object:Gem::Requirement
153
- none: false
154
149
  requirements:
155
- - - ~>
150
+ - - "~>"
156
151
  - !ruby/object:Gem::Version
157
- version: 4.0.4
152
+ version: 0.6.3
158
153
  - !ruby/object:Gem::Dependency
159
- name: rspec-nc
154
+ name: tzinfo
160
155
  requirement: !ruby/object:Gem::Requirement
161
- none: false
162
156
  requirements:
163
- - - ! '>='
157
+ - - "~>"
164
158
  - !ruby/object:Gem::Version
165
- version: '0'
159
+ version: '0.3'
166
160
  type: :development
167
161
  prerelease: false
168
162
  version_requirements: !ruby/object:Gem::Requirement
169
- none: false
170
163
  requirements:
171
- - - ! '>='
164
+ - - "~>"
172
165
  - !ruby/object:Gem::Version
173
- version: '0'
166
+ version: '0.3'
174
167
  description:
175
168
  email:
176
169
  - jnraine@gmail.com
@@ -178,9 +171,10 @@ executables: []
178
171
  extensions: []
179
172
  extra_rdoc_files: []
180
173
  files:
181
- - .gitignore
182
- - .rspec
183
- - .travis.yml
174
+ - ".gitignore"
175
+ - ".rspec"
176
+ - ".travis.yml"
177
+ - CHANGELOG.md
184
178
  - Gemfile
185
179
  - Guardfile
186
180
  - LICENSE.txt
@@ -212,31 +206,31 @@ files:
212
206
  - spec/support/fixtures/on_third_every_two_months_event.ics
213
207
  - spec/support/fixtures/one_day_a_month_for_three_months_event.ics
214
208
  - spec/support/fixtures/utc_event.ics
209
+ - spec/support/fixtures/weekly_with_count_event.ics
215
210
  - spec/support/helpers.rb
216
211
  homepage: https://github.com/icalendar/icalendar-recurrence
217
212
  licenses:
218
213
  - MIT
214
+ metadata: {}
219
215
  post_install_message:
220
216
  rdoc_options: []
221
217
  require_paths:
222
218
  - lib
223
219
  required_ruby_version: !ruby/object:Gem::Requirement
224
- none: false
225
220
  requirements:
226
- - - ! '>='
221
+ - - ">="
227
222
  - !ruby/object:Gem::Version
228
223
  version: '0'
229
224
  required_rubygems_version: !ruby/object:Gem::Requirement
230
- none: false
231
225
  requirements:
232
- - - ! '>='
226
+ - - ">="
233
227
  - !ruby/object:Gem::Version
234
228
  version: '0'
235
229
  requirements: []
236
230
  rubyforge_project:
237
- rubygems_version: 1.8.23
231
+ rubygems_version: 2.4.8
238
232
  signing_key:
239
- specification_version: 3
233
+ specification_version: 4
240
234
  summary: Provides recurrence to icalendar gem.
241
235
  test_files:
242
236
  - spec/lib/recurrence_spec.rb
@@ -257,4 +251,5 @@ test_files:
257
251
  - spec/support/fixtures/on_third_every_two_months_event.ics
258
252
  - spec/support/fixtures/one_day_a_month_for_three_months_event.ics
259
253
  - spec/support/fixtures/utc_event.ics
254
+ - spec/support/fixtures/weekly_with_count_event.ics
260
255
  - spec/support/helpers.rb