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.
- 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
|