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.
Files changed (45) hide show
  1. checksums.yaml +5 -5
  2. data/.github/workflows/main.yml +32 -0
  3. data/.gitignore +1 -0
  4. data/History.txt +39 -0
  5. data/{COPYING → LICENSE} +0 -0
  6. data/README.md +6 -22
  7. data/icalendar.gemspec +17 -18
  8. data/lib/icalendar/alarm.rb +1 -0
  9. data/lib/icalendar/calendar.rb +10 -0
  10. data/lib/icalendar/component.rb +14 -3
  11. data/lib/icalendar/event.rb +3 -0
  12. data/lib/icalendar/has_components.rb +17 -5
  13. data/lib/icalendar/has_properties.rb +27 -19
  14. data/lib/icalendar/journal.rb +2 -0
  15. data/lib/icalendar/marshable.rb +34 -0
  16. data/lib/icalendar/parser.rb +49 -16
  17. data/lib/icalendar/timezone.rb +68 -0
  18. data/lib/icalendar/timezone_store.rb +36 -0
  19. data/lib/icalendar/todo.rb +4 -1
  20. data/lib/icalendar/tzinfo.rb +2 -2
  21. data/lib/icalendar/values/array.rb +1 -2
  22. data/lib/icalendar/values/date.rb +2 -0
  23. data/lib/icalendar/values/date_or_date_time.rb +23 -11
  24. data/lib/icalendar/values/date_time.rb +4 -0
  25. data/lib/icalendar/values/time_with_zone.rb +23 -6
  26. data/lib/icalendar/values/uri.rb +2 -2
  27. data/lib/icalendar/values/utc_offset.rb +10 -2
  28. data/lib/icalendar/version.rb +1 -1
  29. data/lib/icalendar.rb +3 -1
  30. data/spec/alarm_spec.rb +7 -2
  31. data/spec/calendar_spec.rb +34 -0
  32. data/spec/event_spec.rb +24 -0
  33. data/spec/fixtures/bad_wrapping.ics +14 -0
  34. data/spec/fixtures/custom_component.ics +158 -0
  35. data/spec/fixtures/single_event.ics +1 -1
  36. data/spec/fixtures/single_event_bad_organizer.ics +22 -0
  37. data/spec/fixtures/single_event_organizer_parsed.ics +22 -0
  38. data/spec/fixtures/tzid_search.ics +31 -0
  39. data/spec/parser_spec.rb +31 -9
  40. data/spec/roundtrip_spec.rb +32 -9
  41. data/spec/timezone_spec.rb +48 -0
  42. data/spec/tzinfo_spec.rb +1 -1
  43. data/spec/values/date_or_date_time_spec.rb +10 -0
  44. metadata +65 -40
  45. 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
- expect(subject.parse).to be_instance_of Array
13
- expect(subject.parse.count).to eq 1
14
- expect(subject.parse[0]).to be_instance_of Icalendar::Calendar
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
- expect(subject.parse).to be_instance_of Array
42
- expect(subject.parse.count).to be 1
43
- expect(subject.parse[0]).to be_instance_of Icalendar::Event
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
- expect(subject.parse).to be_instance_of Array
65
- expect(subject.parse.count).to eq 1
66
- expect(subject.parse[0]).to be_instance_of Icalendar::Calendar
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
@@ -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.ical_params).to eq 'tzid' => ['US-Mountain']
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
@@ -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
@@ -34,7 +34,7 @@ describe 'TZInfo::Timezone' do
34
34
  BEGIN:VTIMEZONE
35
35
  TZID:Asia/Shanghai
36
36
  BEGIN:STANDARD
37
- DTSTART:19910914T230000
37
+ DTSTART:19910915T010000
38
38
  TZOFFSETFROM:+0900
39
39
  TZOFFSETTO:+0800
40
40
  TZNAME:CST
@@ -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.1
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: 2016-09-04 00:00:00.000000000 Z
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: '10.0'
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: '10.0'
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: '1.3'
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: '1.3'
54
+ version: '2.0'
41
55
  - !ruby/object:Gem::Dependency
42
- name: tzinfo
56
+ name: activesupport
43
57
  requirement: !ruby/object:Gem::Requirement
44
58
  requirements:
45
59
  - - "~>"
46
60
  - !ruby/object:Gem::Version
47
- version: '1.1'
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: '1.1'
68
+ version: '6.0'
55
69
  - !ruby/object:Gem::Dependency
56
- name: tzinfo-data
70
+ name: i18n
57
71
  requirement: !ruby/object:Gem::Requirement
58
72
  requirements:
59
73
  - - "~>"
60
74
  - !ruby/object:Gem::Version
61
- version: '1.2014'
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.2014'
82
+ version: '1.8'
69
83
  - !ruby/object:Gem::Dependency
70
- name: activesupport
84
+ name: tzinfo
71
85
  requirement: !ruby/object:Gem::Requirement
72
86
  requirements:
73
87
  - - "~>"
74
88
  - !ruby/object:Gem::Version
75
- version: '3.2'
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: '3.2'
96
+ version: '1.2'
83
97
  - !ruby/object:Gem::Dependency
84
- name: i18n
98
+ name: tzinfo-data
85
99
  requirement: !ruby/object:Gem::Requirement
86
100
  requirements:
87
- - - "<"
101
+ - - "~>"
88
102
  - !ruby/object:Gem::Version
89
- version: 0.7.0
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: 0.7.0
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.7.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.7.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.0'
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.0'
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.8'
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.8'
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
- HEADS UP! iCalendar 2.0 is not backwards-compatible with 1.x. Please see the README for the new syntax
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
- ActiveSupport is required for TimeWithZone support, but not required for general use.
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: 1.9.2
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
- rubyforge_project:
249
- rubygems_version: 2.6.6
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