icalendar-recurrence 1.0.1 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -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