icalendar 2.4.1 → 2.8.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 +5 -5
- data/.github/workflows/main.yml +32 -0
- data/.gitignore +1 -0
- data/History.txt +39 -0
- data/{COPYING → LICENSE} +0 -0
- data/README.md +6 -22
- data/icalendar.gemspec +17 -18
- data/lib/icalendar/alarm.rb +1 -0
- data/lib/icalendar/calendar.rb +10 -0
- data/lib/icalendar/component.rb +14 -3
- data/lib/icalendar/event.rb +3 -0
- data/lib/icalendar/has_components.rb +17 -5
- data/lib/icalendar/has_properties.rb +27 -19
- data/lib/icalendar/journal.rb +2 -0
- data/lib/icalendar/marshable.rb +34 -0
- data/lib/icalendar/parser.rb +49 -16
- data/lib/icalendar/timezone.rb +68 -0
- data/lib/icalendar/timezone_store.rb +36 -0
- data/lib/icalendar/todo.rb +4 -1
- data/lib/icalendar/tzinfo.rb +2 -2
- data/lib/icalendar/values/array.rb +1 -2
- data/lib/icalendar/values/date.rb +2 -0
- data/lib/icalendar/values/date_or_date_time.rb +23 -11
- data/lib/icalendar/values/date_time.rb +4 -0
- data/lib/icalendar/values/time_with_zone.rb +23 -6
- data/lib/icalendar/values/uri.rb +2 -2
- data/lib/icalendar/values/utc_offset.rb +10 -2
- data/lib/icalendar/version.rb +1 -1
- data/lib/icalendar.rb +3 -1
- data/spec/alarm_spec.rb +7 -2
- data/spec/calendar_spec.rb +34 -0
- data/spec/event_spec.rb +24 -0
- data/spec/fixtures/bad_wrapping.ics +14 -0
- data/spec/fixtures/custom_component.ics +158 -0
- data/spec/fixtures/single_event.ics +1 -1
- data/spec/fixtures/single_event_bad_organizer.ics +22 -0
- data/spec/fixtures/single_event_organizer_parsed.ics +22 -0
- data/spec/fixtures/tzid_search.ics +31 -0
- data/spec/parser_spec.rb +31 -9
- data/spec/roundtrip_spec.rb +32 -9
- data/spec/timezone_spec.rb +48 -0
- data/spec/tzinfo_spec.rb +1 -1
- data/spec/values/date_or_date_time_spec.rb +10 -0
- metadata +65 -40
- data/.travis.yml +0 -18
@@ -0,0 +1,22 @@
|
|
1
|
+
BEGIN:VCALENDAR
|
2
|
+
VERSION:2.0
|
3
|
+
PRODID:bsprodidfortestabc123
|
4
|
+
CALSCALE:GREGORIAN
|
5
|
+
BEGIN:VEVENT
|
6
|
+
DTSTAMP:20050118T211523Z
|
7
|
+
UID:bsuidfortestabc123
|
8
|
+
DTSTART;TZID=US-Mountain:20050120T170000
|
9
|
+
DTEND;TZID=US-Mountain:20050120T184500
|
10
|
+
CLASS:PRIVATE
|
11
|
+
GEO:37.386013;-122.0829322
|
12
|
+
ORGANIZER;CN=Joe Bob\: Magician:mailto:joebob@random.net
|
13
|
+
PRIORITY:2
|
14
|
+
SUMMARY:This is a really long summary to test the method of unfolding lines
|
15
|
+
\, so I'm just going to make it a whole bunch of lines. With a twist: a "
|
16
|
+
ö" takes up multiple bytes\, and should be wrapped to the next line.
|
17
|
+
ATTACH:http://bush.sucks.org/impeach/him.rhtml
|
18
|
+
ATTACH:http://corporations-dominate.existence.net/why.rhtml
|
19
|
+
RDATE;TZID=US-Mountain:20050121T170000,20050122T170000
|
20
|
+
X-TEST-COMPONENT;QTEST="Hello, World":Shouldn't double double quotes
|
21
|
+
END:VEVENT
|
22
|
+
END:VCALENDAR
|
@@ -0,0 +1,22 @@
|
|
1
|
+
BEGIN:VCALENDAR
|
2
|
+
VERSION:2.0
|
3
|
+
PRODID:bsprodidfortestabc123
|
4
|
+
CALSCALE:GREGORIAN
|
5
|
+
BEGIN:VEVENT
|
6
|
+
DTSTAMP:20050118T211523Z
|
7
|
+
UID:bsuidfortestabc123
|
8
|
+
DTSTART;TZID=US-Mountain:20050120T170000
|
9
|
+
DTEND;TZID=US-Mountain:20050120T184500
|
10
|
+
CLASS:PRIVATE
|
11
|
+
GEO:37.386013;-122.0829322
|
12
|
+
ORGANIZER;CN=Joe Bob\:magician:mailto:joebob@random.net
|
13
|
+
PRIORITY:2
|
14
|
+
SUMMARY:This is a really long summary to test the method of unfolding lines
|
15
|
+
\, so I'm just going to make it a whole bunch of lines. With a twist: a "
|
16
|
+
ö" takes up multiple bytes\, and should be wrapped to the next line.
|
17
|
+
ATTACH:http://bush.sucks.org/impeach/him.rhtml
|
18
|
+
ATTACH:http://corporations-dominate.existence.net/why.rhtml
|
19
|
+
RDATE;TZID=US-Mountain:20050121T170000,20050122T170000
|
20
|
+
X-TEST-COMPONENT;QTEST="Hello, World":Shouldn't double double quotes
|
21
|
+
END:VEVENT
|
22
|
+
END:VCALENDAR
|
@@ -0,0 +1,31 @@
|
|
1
|
+
BEGIN:VCALENDAR
|
2
|
+
METHOD:PUBLISH
|
3
|
+
VERSION:2.0
|
4
|
+
CALSCALE:GREGORIAN
|
5
|
+
BEGIN:VTIMEZONE
|
6
|
+
TZID:(GMT-05:00) Eastern Time (US & Canada)
|
7
|
+
BEGIN:STANDARD
|
8
|
+
DTSTART:16011104T010000
|
9
|
+
RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=11
|
10
|
+
TZOFFSETFROM:-0400
|
11
|
+
TZOFFSETTO:-0500
|
12
|
+
END:STANDARD
|
13
|
+
BEGIN:DAYLIGHT
|
14
|
+
DTSTART:16010311T030000
|
15
|
+
RRULE:FREQ=YEARLY;BYDAY=2SU;BYMONTH=3
|
16
|
+
TZOFFSETFROM:-0500
|
17
|
+
TZOFFSETTO:-0400
|
18
|
+
END:DAYLIGHT
|
19
|
+
END:VTIMEZONE
|
20
|
+
BEGIN:VEVENT
|
21
|
+
CREATED:20120104T225934Z
|
22
|
+
UID:23D50AF6-23D4-4CB5-85C6-4826F3F19999
|
23
|
+
DTEND;TZID="(GMT-05:00) Eastern Time (US & Canada)":20180104T130000
|
24
|
+
RRULE:FREQ=WEEKLY;INTERVAL=1
|
25
|
+
TRANSP:OPAQUE
|
26
|
+
SUMMARY:Recurring on Wed
|
27
|
+
DTSTART;TZID="(GMT-05:00) Eastern Time (US & Canada)":20180104T100000
|
28
|
+
DTSTAMP:20120104T231637Z
|
29
|
+
SEQUENCE:6
|
30
|
+
END:VEVENT
|
31
|
+
END:VCALENDAR
|
data/spec/parser_spec.rb
CHANGED
@@ -9,9 +9,10 @@ describe Icalendar::Parser do
|
|
9
9
|
let(:fn) { 'single_event.ics' }
|
10
10
|
|
11
11
|
it 'returns an array of calendars' do
|
12
|
-
|
13
|
-
expect(
|
14
|
-
expect(
|
12
|
+
parsed = subject.parse
|
13
|
+
expect(parsed).to be_instance_of Array
|
14
|
+
expect(parsed.count).to eq 1
|
15
|
+
expect(parsed[0]).to be_instance_of Icalendar::Calendar
|
15
16
|
end
|
16
17
|
|
17
18
|
it 'properly splits multi-valued lines' do
|
@@ -38,9 +39,10 @@ describe Icalendar::Parser do
|
|
38
39
|
before { subject.component_class = Icalendar::Event }
|
39
40
|
|
40
41
|
it 'returns an array of events' do
|
41
|
-
|
42
|
-
expect(
|
43
|
-
expect(
|
42
|
+
parsed = subject.parse
|
43
|
+
expect(parsed).to be_instance_of Array
|
44
|
+
expect(parsed.count).to be 1
|
45
|
+
expect(parsed[0]).to be_instance_of Icalendar::Event
|
44
46
|
end
|
45
47
|
end
|
46
48
|
context 'events.ics' do
|
@@ -55,15 +57,35 @@ describe Icalendar::Parser do
|
|
55
57
|
expect(events.last.uid).to eq("uid-1234-uid-4321")
|
56
58
|
end
|
57
59
|
end
|
60
|
+
context 'tzid_search.ics' do
|
61
|
+
let(:fn) { 'tzid_search.ics' }
|
62
|
+
|
63
|
+
it 'correctly sets the weird tzid' do
|
64
|
+
parsed = subject.parse
|
65
|
+
event = parsed.first.events.first
|
66
|
+
expect(event.dtstart.utc).to eq Time.parse("20180104T150000Z")
|
67
|
+
end
|
68
|
+
end
|
69
|
+
context 'custom_component.ics' do
|
70
|
+
let(:fn) { 'custom_component.ics' }
|
71
|
+
|
72
|
+
it 'correctly handles custom named components' do
|
73
|
+
parsed = subject.parse
|
74
|
+
calendar = parsed.first
|
75
|
+
expect(calendar.custom_component('x_event_series').size).to eq 1
|
76
|
+
expect(calendar.custom_component('X-EVENT-SERIES').size).to eq 1
|
77
|
+
end
|
78
|
+
end
|
58
79
|
end
|
59
80
|
|
60
81
|
describe '#parse with bad line' do
|
61
82
|
let(:fn) { 'single_event_bad_line.ics' }
|
62
83
|
|
63
84
|
it 'returns an array of calendars' do
|
64
|
-
|
65
|
-
expect(
|
66
|
-
expect(
|
85
|
+
parsed = subject.parse
|
86
|
+
expect(parsed).to be_instance_of Array
|
87
|
+
expect(parsed.count).to eq 1
|
88
|
+
expect(parsed[0]).to be_instance_of Icalendar::Calendar
|
67
89
|
end
|
68
90
|
|
69
91
|
it 'properly splits multi-valued lines' do
|
data/spec/roundtrip_spec.rb
CHANGED
@@ -15,7 +15,21 @@ describe Icalendar do
|
|
15
15
|
parsed = Icalendar::Calendar.parse(source).first
|
16
16
|
event.rdate = parsed.events.first.rdate
|
17
17
|
expect(event.rdate.first).to be_kind_of Icalendar::Values::Array
|
18
|
-
expect(event.rdate.first.
|
18
|
+
expect(event.rdate.first.params_ical).to eq ";TZID=US-Mountain"
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
describe 'cleanly handle facebook organizers' do
|
23
|
+
let(:source) { File.read File.join(File.dirname(__FILE__), 'fixtures', 'single_event_bad_organizer.ics') }
|
24
|
+
let(:source_lowered_uri) { File.read File.join(File.dirname(__FILE__), 'fixtures', 'single_event_organizer_parsed.ics') }
|
25
|
+
it 'will generate the same file as it parsed' do
|
26
|
+
ical = Icalendar::Calendar.parse(source).first.to_ical
|
27
|
+
source_equal = ical == source
|
28
|
+
# rbx-3 parses the organizer as a URI, which strips the space and lowercases everything after the first :
|
29
|
+
# this is correct behavior, according to the icalendar spec, so we're not fudging the parser to accomodate
|
30
|
+
# facebook not properly wrapping the CN param in dquotes
|
31
|
+
source_lowered_equal = ical == source_lowered_uri
|
32
|
+
expect(source_equal || source_lowered_equal).to be true
|
19
33
|
end
|
20
34
|
end
|
21
35
|
|
@@ -67,18 +81,18 @@ describe Icalendar do
|
|
67
81
|
it 'sorts time events by start time' do
|
68
82
|
events = subject.sort_by(&:dtstart)
|
69
83
|
|
70
|
-
expect(events.first.dtstart).to eq ::DateTime.new(2014, 7, 14, 9, 0, 0, '-4')
|
84
|
+
expect(events.first.dtstart.to_datetime).to eq ::DateTime.new(2014, 7, 14, 9, 0, 0, '-4')
|
71
85
|
|
72
|
-
expect(events.last.dtstart).to eq ::DateTime.new(2014, 7, 14, 9, 1, 0, '-4')
|
73
|
-
expect(events.last.dtend).to eq ::DateTime.new(2014, 7, 14, 9, 59, 0, '-4')
|
86
|
+
expect(events.last.dtstart.to_datetime).to eq ::DateTime.new(2014, 7, 14, 9, 1, 0, '-4')
|
87
|
+
expect(events.last.dtend.to_datetime).to eq ::DateTime.new(2014, 7, 14, 9, 59, 0, '-4')
|
74
88
|
end
|
75
89
|
|
76
90
|
it 'sorts time events by end time' do
|
77
91
|
events = subject.sort_by(&:dtend)
|
78
92
|
|
79
|
-
expect(events.first.dtstart).to eq ::DateTime.new(2014, 7, 14, 9, 1, 0, '-4')
|
80
|
-
expect(events.first.dtend).to eq ::DateTime.new(2014, 7, 14, 9, 59, 0, '-4')
|
81
|
-
expect(events.last.dtstart).to eq ::DateTime.new(2014, 7, 14, 9, 0, 0, '-4')
|
93
|
+
expect(events.first.dtstart.to_datetime).to eq ::DateTime.new(2014, 7, 14, 9, 1, 0, '-4')
|
94
|
+
expect(events.first.dtend.to_datetime).to eq ::DateTime.new(2014, 7, 14, 9, 59, 0, '-4')
|
95
|
+
expect(events.last.dtstart.to_datetime).to eq ::DateTime.new(2014, 7, 14, 9, 0, 0, '-4')
|
82
96
|
end
|
83
97
|
end
|
84
98
|
|
@@ -89,8 +103,8 @@ describe Icalendar do
|
|
89
103
|
it 'sorts time events' do
|
90
104
|
events = subject.sort_by(&:dtstart)
|
91
105
|
|
92
|
-
expect(events.first.dtstart).to eq ::Date.new(2014, 7, 14)
|
93
|
-
expect(events.last.dtstart).to eq ::DateTime.new(2014, 7, 14, 9, 0, 0, '-4')
|
106
|
+
expect(events.first.dtstart.to_date).to eq ::Date.new(2014, 7, 14)
|
107
|
+
expect(events.last.dtstart.to_datetime).to eq ::DateTime.new(2014, 7, 14, 9, 0, 0, '-4')
|
94
108
|
end
|
95
109
|
end
|
96
110
|
|
@@ -121,6 +135,15 @@ describe Icalendar do
|
|
121
135
|
ical = subject.parse.first.to_ical
|
122
136
|
expect(ical).to include 'CUSTOMFIELD:Not properly noted as custom with X- prefix.'
|
123
137
|
end
|
138
|
+
|
139
|
+
context 'custom components' do
|
140
|
+
let(:source) { File.read File.join(File.dirname(__FILE__), 'fixtures', 'custom_component.ics') }
|
141
|
+
|
142
|
+
it 'can output the custom component' do
|
143
|
+
ical = subject.parse.first.to_ical
|
144
|
+
expect(ical).to include 'BEGIN:X-EVENT-SERIES'
|
145
|
+
end
|
146
|
+
end
|
124
147
|
end
|
125
148
|
end
|
126
149
|
end
|
data/spec/timezone_spec.rb
CHANGED
@@ -28,4 +28,52 @@ describe Icalendar::Timezone do
|
|
28
28
|
it { should_not be_valid }
|
29
29
|
end
|
30
30
|
end
|
31
|
+
|
32
|
+
context 'marshalling' do
|
33
|
+
context 'with standard/daylight components' do
|
34
|
+
before do
|
35
|
+
subject.standard do |standard|
|
36
|
+
standard.rrule = Icalendar::Values::Recur.new("FREQ=YEARLY;INTERVAL=1;BYDAY=-1SU;BYMONTH=10")
|
37
|
+
standard.dtstart = Icalendar::Values::DateTime.new("16010101T030000")
|
38
|
+
standard.tzoffsetfrom = Icalendar::Values::UtcOffset.new("+0200")
|
39
|
+
standard.tzoffsetto = Icalendar::Values::UtcOffset.new("+0100")
|
40
|
+
end
|
41
|
+
|
42
|
+
subject.daylight do |daylight|
|
43
|
+
daylight.rrule = Icalendar::Values::Recur.new("FREQ=YEARLY;INTERVAL=1;BYDAY=-1SU;BYMONTH=3")
|
44
|
+
daylight.dtstart = Icalendar::Values::DateTime.new("16010101T020000")
|
45
|
+
daylight.tzoffsetfrom = Icalendar::Values::UtcOffset.new("+0100")
|
46
|
+
daylight.tzoffsetto = Icalendar::Values::UtcOffset.new("+0200")
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
it 'can be de/serialized' do
|
51
|
+
first_standard = subject.standards.first
|
52
|
+
first_daylight = subject.daylights.first
|
53
|
+
|
54
|
+
expect(first_standard.valid?).to be_truthy
|
55
|
+
expect(first_daylight.valid?).to be_truthy
|
56
|
+
|
57
|
+
# calling previous_occurrence intializes @cached_occurrences with a time that's not handled by ruby marshaller
|
58
|
+
first_occurence_for = Time.new(1601, 10, 31)
|
59
|
+
|
60
|
+
standard_previous_occurrence = first_standard.previous_occurrence(first_occurence_for)
|
61
|
+
expect(standard_previous_occurrence).not_to be_nil
|
62
|
+
|
63
|
+
daylight_previous_occurrence = first_daylight.previous_occurrence(first_occurence_for)
|
64
|
+
expect(daylight_previous_occurrence).not_to be_nil
|
65
|
+
|
66
|
+
deserialized = nil
|
67
|
+
|
68
|
+
expect { deserialized = Marshal.load(Marshal.dump(subject)) }.not_to raise_exception
|
69
|
+
|
70
|
+
expect(deserialized.standards.first.previous_occurrence(first_occurence_for)).to eq(standard_previous_occurrence)
|
71
|
+
expect(deserialized.daylights.first.previous_occurrence(first_occurence_for)).to eq(daylight_previous_occurrence)
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
it 'can be de/serialized' do
|
76
|
+
expect { Marshal.load(Marshal.dump(subject)) }.not_to raise_exception
|
77
|
+
end
|
78
|
+
end
|
31
79
|
end
|
data/spec/tzinfo_spec.rb
CHANGED
@@ -38,4 +38,14 @@ describe Icalendar::Values::DateOrDateTime do
|
|
38
38
|
end
|
39
39
|
end
|
40
40
|
end
|
41
|
+
|
42
|
+
describe "#to_ical" do
|
43
|
+
let(:event) { Icalendar::Event.new }
|
44
|
+
let(:time_stamp) { Time.now.strftime Icalendar::Values::DateTime::FORMAT }
|
45
|
+
|
46
|
+
it "should call parse behind the scenes" do
|
47
|
+
event.dtstart = described_class.new time_stamp, "tzid" => "UTC"
|
48
|
+
expect(event.to_ical).to include "DTSTART:#{time_stamp}Z"
|
49
|
+
end
|
50
|
+
end
|
41
51
|
end
|
metadata
CHANGED
@@ -1,141 +1,155 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: icalendar
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.8.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryan Ahearn
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-07-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: ice_cube
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0.16'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0.16'
|
13
27
|
- !ruby/object:Gem::Dependency
|
14
28
|
name: rake
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|
16
30
|
requirements:
|
17
31
|
- - "~>"
|
18
32
|
- !ruby/object:Gem::Version
|
19
|
-
version: '
|
33
|
+
version: '13.0'
|
20
34
|
type: :development
|
21
35
|
prerelease: false
|
22
36
|
version_requirements: !ruby/object:Gem::Requirement
|
23
37
|
requirements:
|
24
38
|
- - "~>"
|
25
39
|
- !ruby/object:Gem::Version
|
26
|
-
version: '
|
40
|
+
version: '13.0'
|
27
41
|
- !ruby/object:Gem::Dependency
|
28
42
|
name: bundler
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
30
44
|
requirements:
|
31
45
|
- - "~>"
|
32
46
|
- !ruby/object:Gem::Version
|
33
|
-
version: '
|
47
|
+
version: '2.0'
|
34
48
|
type: :development
|
35
49
|
prerelease: false
|
36
50
|
version_requirements: !ruby/object:Gem::Requirement
|
37
51
|
requirements:
|
38
52
|
- - "~>"
|
39
53
|
- !ruby/object:Gem::Version
|
40
|
-
version: '
|
54
|
+
version: '2.0'
|
41
55
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
56
|
+
name: activesupport
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
44
58
|
requirements:
|
45
59
|
- - "~>"
|
46
60
|
- !ruby/object:Gem::Version
|
47
|
-
version: '
|
61
|
+
version: '6.0'
|
48
62
|
type: :development
|
49
63
|
prerelease: false
|
50
64
|
version_requirements: !ruby/object:Gem::Requirement
|
51
65
|
requirements:
|
52
66
|
- - "~>"
|
53
67
|
- !ruby/object:Gem::Version
|
54
|
-
version: '
|
68
|
+
version: '6.0'
|
55
69
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
70
|
+
name: i18n
|
57
71
|
requirement: !ruby/object:Gem::Requirement
|
58
72
|
requirements:
|
59
73
|
- - "~>"
|
60
74
|
- !ruby/object:Gem::Version
|
61
|
-
version: '1.
|
75
|
+
version: '1.8'
|
62
76
|
type: :development
|
63
77
|
prerelease: false
|
64
78
|
version_requirements: !ruby/object:Gem::Requirement
|
65
79
|
requirements:
|
66
80
|
- - "~>"
|
67
81
|
- !ruby/object:Gem::Version
|
68
|
-
version: '1.
|
82
|
+
version: '1.8'
|
69
83
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
84
|
+
name: tzinfo
|
71
85
|
requirement: !ruby/object:Gem::Requirement
|
72
86
|
requirements:
|
73
87
|
- - "~>"
|
74
88
|
- !ruby/object:Gem::Version
|
75
|
-
version: '
|
89
|
+
version: '1.2'
|
76
90
|
type: :development
|
77
91
|
prerelease: false
|
78
92
|
version_requirements: !ruby/object:Gem::Requirement
|
79
93
|
requirements:
|
80
94
|
- - "~>"
|
81
95
|
- !ruby/object:Gem::Version
|
82
|
-
version: '
|
96
|
+
version: '1.2'
|
83
97
|
- !ruby/object:Gem::Dependency
|
84
|
-
name:
|
98
|
+
name: tzinfo-data
|
85
99
|
requirement: !ruby/object:Gem::Requirement
|
86
100
|
requirements:
|
87
|
-
- - "
|
101
|
+
- - "~>"
|
88
102
|
- !ruby/object:Gem::Version
|
89
|
-
version:
|
103
|
+
version: '1.2020'
|
90
104
|
type: :development
|
91
105
|
prerelease: false
|
92
106
|
version_requirements: !ruby/object:Gem::Requirement
|
93
107
|
requirements:
|
94
|
-
- - "
|
108
|
+
- - "~>"
|
95
109
|
- !ruby/object:Gem::Version
|
96
|
-
version:
|
110
|
+
version: '1.2020'
|
97
111
|
- !ruby/object:Gem::Dependency
|
98
112
|
name: timecop
|
99
113
|
requirement: !ruby/object:Gem::Requirement
|
100
114
|
requirements:
|
101
115
|
- - "~>"
|
102
116
|
- !ruby/object:Gem::Version
|
103
|
-
version: 0.
|
117
|
+
version: '0.9'
|
104
118
|
type: :development
|
105
119
|
prerelease: false
|
106
120
|
version_requirements: !ruby/object:Gem::Requirement
|
107
121
|
requirements:
|
108
122
|
- - "~>"
|
109
123
|
- !ruby/object:Gem::Version
|
110
|
-
version: 0.
|
124
|
+
version: '0.9'
|
111
125
|
- !ruby/object:Gem::Dependency
|
112
126
|
name: rspec
|
113
127
|
requirement: !ruby/object:Gem::Requirement
|
114
128
|
requirements:
|
115
129
|
- - "~>"
|
116
130
|
- !ruby/object:Gem::Version
|
117
|
-
version: '3.
|
131
|
+
version: '3.8'
|
118
132
|
type: :development
|
119
133
|
prerelease: false
|
120
134
|
version_requirements: !ruby/object:Gem::Requirement
|
121
135
|
requirements:
|
122
136
|
- - "~>"
|
123
137
|
- !ruby/object:Gem::Version
|
124
|
-
version: '3.
|
138
|
+
version: '3.8'
|
125
139
|
- !ruby/object:Gem::Dependency
|
126
140
|
name: simplecov
|
127
141
|
requirement: !ruby/object:Gem::Requirement
|
128
142
|
requirements:
|
129
143
|
- - "~>"
|
130
144
|
- !ruby/object:Gem::Version
|
131
|
-
version: '0.
|
145
|
+
version: '0.16'
|
132
146
|
type: :development
|
133
147
|
prerelease: false
|
134
148
|
version_requirements: !ruby/object:Gem::Requirement
|
135
149
|
requirements:
|
136
150
|
- - "~>"
|
137
151
|
- !ruby/object:Gem::Version
|
138
|
-
version: '0.
|
152
|
+
version: '0.16'
|
139
153
|
description: |
|
140
154
|
Implements the iCalendar specification (RFC-5545) in Ruby. This allows
|
141
155
|
for the generation and parsing of .ics files, which are used by a
|
@@ -146,12 +160,12 @@ executables: []
|
|
146
160
|
extensions: []
|
147
161
|
extra_rdoc_files: []
|
148
162
|
files:
|
163
|
+
- ".github/workflows/main.yml"
|
149
164
|
- ".gitignore"
|
150
165
|
- ".rspec"
|
151
|
-
- ".travis.yml"
|
152
|
-
- COPYING
|
153
166
|
- Gemfile
|
154
167
|
- History.txt
|
168
|
+
- LICENSE
|
155
169
|
- README.md
|
156
170
|
- Rakefile
|
157
171
|
- icalendar.gemspec
|
@@ -166,8 +180,10 @@ files:
|
|
166
180
|
- lib/icalendar/has_properties.rb
|
167
181
|
- lib/icalendar/journal.rb
|
168
182
|
- lib/icalendar/logger.rb
|
183
|
+
- lib/icalendar/marshable.rb
|
169
184
|
- lib/icalendar/parser.rb
|
170
185
|
- lib/icalendar/timezone.rb
|
186
|
+
- lib/icalendar/timezone_store.rb
|
171
187
|
- lib/icalendar/todo.rb
|
172
188
|
- lib/icalendar/tzinfo.rb
|
173
189
|
- lib/icalendar/value.rb
|
@@ -194,6 +210,8 @@ files:
|
|
194
210
|
- spec/calendar_spec.rb
|
195
211
|
- spec/downcased_hash_spec.rb
|
196
212
|
- spec/event_spec.rb
|
213
|
+
- spec/fixtures/bad_wrapping.ics
|
214
|
+
- spec/fixtures/custom_component.ics
|
197
215
|
- spec/fixtures/event.ics
|
198
216
|
- spec/fixtures/nondefault_values.ics
|
199
217
|
- spec/fixtures/nonstandard.ics
|
@@ -201,11 +219,14 @@ files:
|
|
201
219
|
- spec/fixtures/single_event.ics
|
202
220
|
- spec/fixtures/single_event_bad_dtstart.ics
|
203
221
|
- spec/fixtures/single_event_bad_line.ics
|
222
|
+
- spec/fixtures/single_event_bad_organizer.ics
|
223
|
+
- spec/fixtures/single_event_organizer_parsed.ics
|
204
224
|
- spec/fixtures/timezone.ics
|
205
225
|
- spec/fixtures/two_date_time_events.ics
|
206
226
|
- spec/fixtures/two_day_events.ics
|
207
227
|
- spec/fixtures/two_events.ics
|
208
228
|
- spec/fixtures/two_time_events.ics
|
229
|
+
- spec/fixtures/tzid_search.ics
|
209
230
|
- spec/freebusy_spec.rb
|
210
231
|
- spec/journal_spec.rb
|
211
232
|
- spec/parser_spec.rb
|
@@ -222,15 +243,15 @@ files:
|
|
222
243
|
- spec/values/text_spec.rb
|
223
244
|
- spec/values/utc_offset_spec.rb
|
224
245
|
homepage: https://github.com/icalendar/icalendar
|
225
|
-
licenses:
|
246
|
+
licenses:
|
247
|
+
- BSD-2-Clause
|
248
|
+
- GPL-3.0-only
|
249
|
+
- icalendar
|
226
250
|
metadata: {}
|
227
|
-
post_install_message:
|
228
|
-
|
229
|
-
|
230
|
-
HEADS UP! icalendar 2.2.0 switches to non-strict parsing as default. Please see the README if you
|
231
|
-
rely on strict parsing for information on how to enable it.
|
251
|
+
post_install_message: 'ActiveSupport is required for TimeWithZone support, but not
|
252
|
+
required for general use.
|
232
253
|
|
233
|
-
|
254
|
+
'
|
234
255
|
rdoc_options: []
|
235
256
|
require_paths:
|
236
257
|
- lib
|
@@ -238,16 +259,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
238
259
|
requirements:
|
239
260
|
- - ">="
|
240
261
|
- !ruby/object:Gem::Version
|
241
|
-
version:
|
262
|
+
version: 2.4.0
|
242
263
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
243
264
|
requirements:
|
244
265
|
- - ">="
|
245
266
|
- !ruby/object:Gem::Version
|
246
267
|
version: '0'
|
247
268
|
requirements: []
|
248
|
-
|
249
|
-
|
250
|
-
signing_key:
|
269
|
+
rubygems_version: 3.3.7
|
270
|
+
signing_key:
|
251
271
|
specification_version: 4
|
252
272
|
summary: A ruby implementation of the iCalendar specification (RFC-5545).
|
253
273
|
test_files:
|
@@ -255,6 +275,8 @@ test_files:
|
|
255
275
|
- spec/calendar_spec.rb
|
256
276
|
- spec/downcased_hash_spec.rb
|
257
277
|
- spec/event_spec.rb
|
278
|
+
- spec/fixtures/bad_wrapping.ics
|
279
|
+
- spec/fixtures/custom_component.ics
|
258
280
|
- spec/fixtures/event.ics
|
259
281
|
- spec/fixtures/nondefault_values.ics
|
260
282
|
- spec/fixtures/nonstandard.ics
|
@@ -262,11 +284,14 @@ test_files:
|
|
262
284
|
- spec/fixtures/single_event.ics
|
263
285
|
- spec/fixtures/single_event_bad_dtstart.ics
|
264
286
|
- spec/fixtures/single_event_bad_line.ics
|
287
|
+
- spec/fixtures/single_event_bad_organizer.ics
|
288
|
+
- spec/fixtures/single_event_organizer_parsed.ics
|
265
289
|
- spec/fixtures/timezone.ics
|
266
290
|
- spec/fixtures/two_date_time_events.ics
|
267
291
|
- spec/fixtures/two_day_events.ics
|
268
292
|
- spec/fixtures/two_events.ics
|
269
293
|
- spec/fixtures/two_time_events.ics
|
294
|
+
- spec/fixtures/tzid_search.ics
|
270
295
|
- spec/freebusy_spec.rb
|
271
296
|
- spec/journal_spec.rb
|
272
297
|
- spec/parser_spec.rb
|
data/.travis.yml
DELETED
@@ -1,18 +0,0 @@
|
|
1
|
-
sudo: false
|
2
|
-
before_install:
|
3
|
-
- gem install bundler
|
4
|
-
language: ruby
|
5
|
-
rvm:
|
6
|
-
- 2.3.1
|
7
|
-
- 2.2
|
8
|
-
- 2.1
|
9
|
-
- 2.0
|
10
|
-
- jruby-19mode
|
11
|
-
- rbx-2
|
12
|
-
- ruby-head
|
13
|
-
- jruby-head
|
14
|
-
matrix:
|
15
|
-
allow_failures:
|
16
|
-
- rvm: ruby-head
|
17
|
-
- rvm: jruby-head
|
18
|
-
script: bundle exec rake spec
|