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.
- checksums.yaml +7 -0
- data/.rspec +0 -1
- data/CHANGELOG.md +7 -0
- data/icalendar-recurrence.gemspec +7 -6
- data/lib/icalendar/recurrence/schedule.rb +19 -84
- data/lib/icalendar/recurrence/time_util.rb +5 -5
- data/lib/icalendar/recurrence/version.rb +1 -1
- data/spec/lib/schedule_spec.rb +17 -20
- data/spec/lib/time_util_spec.rb +5 -5
- data/spec/spec_helper.rb +5 -0
- data/spec/support/fixtures/weekly_with_count_event.ics +23 -0
- metadata +70 -75
checksums.yaml
ADDED
@@ -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
data/CHANGELOG.md
ADDED
@@ -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.
|
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 '
|
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 =
|
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
|
-
|
79
|
-
|
80
|
-
|
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)
|
data/spec/lib/schedule_spec.rb
CHANGED
@@ -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
|
-
|
45
|
-
let(:schedule) { Schedule.new(nil) }
|
37
|
+
let(:example_occurrence) { example_occurrences.first }
|
46
38
|
|
47
|
-
it "returns
|
48
|
-
expect(
|
49
|
-
expect(
|
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
|
-
|
48
|
+
|
49
|
+
end
|
data/spec/lib/time_util_spec.rb
CHANGED
@@ -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("
|
85
|
-
minute_after_clocks_change
|
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
|
data/spec/spec_helper.rb
CHANGED
@@ -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
|
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:
|
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.
|
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.
|
40
|
+
version: 0.13.0
|
46
41
|
- !ruby/object:Gem::Dependency
|
47
|
-
name:
|
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:
|
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:
|
54
|
+
version: 4.0.4
|
62
55
|
- !ruby/object:Gem::Dependency
|
63
|
-
name:
|
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:
|
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:
|
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:
|
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:
|
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:
|
110
|
+
version: 4.2.8
|
110
111
|
- !ruby/object:Gem::Dependency
|
111
|
-
name:
|
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:
|
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:
|
124
|
+
version: 10.2.1
|
126
125
|
- !ruby/object:Gem::Dependency
|
127
|
-
name:
|
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:
|
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:
|
138
|
+
version: 2.14.1
|
142
139
|
- !ruby/object:Gem::Dependency
|
143
|
-
name:
|
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:
|
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:
|
152
|
+
version: 0.6.3
|
158
153
|
- !ruby/object:Gem::Dependency
|
159
|
-
name:
|
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:
|
231
|
+
rubygems_version: 2.4.8
|
238
232
|
signing_key:
|
239
|
-
specification_version:
|
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
|