icalendar 1.5.4 → 2.0.0.beta.1
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/.gitignore +1 -1
- data/.rspec +2 -0
- data/.travis.yml +1 -2
- data/History.txt +2 -7
- data/README.md +82 -107
- data/Rakefile +6 -7
- data/icalendar.gemspec +10 -9
- data/lib/icalendar.rb +17 -33
- data/lib/icalendar/alarm.rb +35 -0
- data/lib/icalendar/calendar.rb +17 -100
- data/lib/icalendar/component.rb +41 -403
- data/lib/icalendar/event.rb +51 -0
- data/lib/icalendar/freebusy.rb +27 -0
- data/lib/icalendar/has_components.rb +83 -0
- data/lib/icalendar/has_properties.rb +156 -0
- data/lib/icalendar/journal.rb +39 -0
- data/lib/icalendar/parser.rb +75 -403
- data/lib/icalendar/timezone.rb +53 -0
- data/lib/icalendar/todo.rb +52 -0
- data/lib/icalendar/tzinfo.rb +30 -30
- data/lib/icalendar/value.rb +80 -0
- data/lib/icalendar/values/array.rb +43 -0
- data/lib/icalendar/values/binary.rb +31 -0
- data/lib/icalendar/values/boolean.rb +17 -0
- data/lib/icalendar/values/cal_address.rb +8 -0
- data/lib/icalendar/values/date.rb +26 -0
- data/lib/icalendar/values/date_time.rb +34 -0
- data/lib/icalendar/values/duration.rb +48 -0
- data/lib/icalendar/values/float.rb +17 -0
- data/lib/icalendar/values/integer.rb +17 -0
- data/lib/icalendar/values/period.rb +46 -0
- data/lib/icalendar/values/recur.rb +63 -0
- data/lib/icalendar/values/text.rb +26 -0
- data/lib/icalendar/values/time.rb +34 -0
- data/lib/icalendar/values/time_with_zone.rb +31 -0
- data/lib/icalendar/values/uri.rb +19 -0
- data/lib/icalendar/values/utc_offset.rb +39 -0
- data/lib/icalendar/version.rb +5 -0
- data/spec/alarm_spec.rb +108 -0
- data/spec/calendar_spec.rb +167 -0
- data/spec/event_spec.rb +108 -0
- data/{test/fixtures/folding.ics → spec/fixtures/nondefault_values.ics} +2 -2
- data/{test → spec}/fixtures/single_event.ics +11 -14
- data/spec/fixtures/timezone.ics +35 -0
- data/spec/freebusy_spec.rb +7 -0
- data/spec/journal_spec.rb +7 -0
- data/spec/parser_spec.rb +26 -0
- data/spec/roundtrip_spec.rb +40 -0
- data/spec/spec_helper.rb +25 -0
- data/spec/timezone_spec.rb +31 -0
- data/spec/todo_spec.rb +24 -0
- data/spec/tzinfo_spec.rb +85 -0
- data/spec/values/date_time_spec.rb +80 -0
- data/spec/values/duration_spec.rb +67 -0
- data/spec/values/period_spec.rb +47 -0
- data/spec/values/recur_spec.rb +47 -0
- data/spec/values/text_spec.rb +72 -0
- data/spec/values/utc_offset_spec.rb +41 -0
- metadata +129 -88
- data/GPL +0 -340
- data/examples/create_cal.rb +0 -45
- data/examples/parse_cal.rb +0 -20
- data/examples/single_event.ics +0 -18
- data/lib/hash_attrs.rb +0 -34
- data/lib/icalendar/base.rb +0 -47
- data/lib/icalendar/component/alarm.rb +0 -47
- data/lib/icalendar/component/event.rb +0 -131
- data/lib/icalendar/component/freebusy.rb +0 -38
- data/lib/icalendar/component/journal.rb +0 -60
- data/lib/icalendar/component/timezone.rb +0 -91
- data/lib/icalendar/component/todo.rb +0 -64
- data/lib/icalendar/conversions.rb +0 -107
- data/lib/icalendar/helpers.rb +0 -109
- data/lib/icalendar/parameter.rb +0 -33
- data/lib/icalendar/rrule.rb +0 -133
- data/lib/meta.rb +0 -32
- data/script/console +0 -10
- data/script/recur1.ics +0 -38
- data/script/tryit.rb +0 -13
- data/test/component/test_event.rb +0 -253
- data/test/component/test_timezone.rb +0 -74
- data/test/component/test_todo.rb +0 -31
- data/test/fixtures/life.ics +0 -46
- data/test/fixtures/nonstandard.ics +0 -25
- data/test/fixtures/simplecal.ics +0 -119
- data/test/interactive.rb +0 -17
- data/test/read_write.rb +0 -23
- data/test/test_calendar.rb +0 -167
- data/test/test_component.rb +0 -102
- data/test/test_conversions.rb +0 -104
- data/test/test_helper.rb +0 -7
- data/test/test_parameter.rb +0 -91
- data/test/test_parser.rb +0 -100
- data/test/test_tzinfo.rb +0 -83
- data/website/index.html +0 -70
- data/website/index.txt +0 -38
- data/website/javascripts/rounded_corners_lite.inc.js +0 -285
- data/website/stylesheets/screen.css +0 -159
- data/website/template.html.erb +0 -50
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: eb0a66f621c41416a3adc31d2b51de3f28b5f777
|
4
|
+
data.tar.gz: b5ec14a510654033efffa5c75cac5fb7cba3227e
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 8a91a092682a21f37d46f70107ce223df05c6a3d906cf4cc8b87dfb5e4524429498979ec41dcac6319359b768a8e70f177ebcb5cf87ffd12b0eac757d874d607
|
7
|
+
data.tar.gz: 70a6edaf55706b6bc500145967c75c1eb0d98d5ea5262aae745c89a1084ce8d019b4baf7cd9d763345258296883a53b78a4c7f26a707b1c5375d5ed7a397a359
|
data/.gitignore
CHANGED
data/.rspec
ADDED
data/.travis.yml
CHANGED
data/History.txt
CHANGED
@@ -1,10 +1,5 @@
|
|
1
|
-
===
|
2
|
-
*
|
3
|
-
|
4
|
-
=== 1.5.3 2014-04-20
|
5
|
-
* Restore printing of parameters on multiline properties
|
6
|
-
* Prevent crash on parsing calendar with NAME properties - Philip Müller
|
7
|
-
* Enforce lack of ruby 1.8.7 support
|
1
|
+
=== 2.0.0.beta.1 2014-03-30
|
2
|
+
* Rewrite for easier development going forward.
|
8
3
|
|
9
4
|
=== 1.5.2 2014-02-22
|
10
5
|
* Output timezone components first
|
data/README.md
CHANGED
@@ -10,9 +10,9 @@ iCalendar -- Internet calendaring, Ruby style
|
|
10
10
|
---
|
11
11
|
|
12
12
|
iCalendar 2.0 is under active development, and can be followed in the
|
13
|
-
[
|
13
|
+
[master branch](https://github.com/icalendar/icalendar/tree/master).
|
14
14
|
|
15
|
-
iCalendar 1.x (currently the
|
15
|
+
iCalendar 1.x (currently the 1.x branch) will still survive for a
|
16
16
|
while, but will only be accepting bug fixes from this point forward
|
17
17
|
unless someone else wants to take over more active maintainership of
|
18
18
|
the 1.x series.
|
@@ -27,77 +27,56 @@ the 1.x series.
|
|
27
27
|
DESCRIPTION
|
28
28
|
---
|
29
29
|
|
30
|
-
iCalendar is a Ruby library for dealing with iCalendar files in the
|
31
|
-
iCalendar format defined by RFC-
|
32
|
-
|
33
|
-
The use of calendaring and scheduling has grown considerably in the
|
34
|
-
last decade. Enterprise and inter-enterprise business has become
|
35
|
-
dependent on rapid scheduling of events and actions using this
|
36
|
-
information technology. However, the longer term growth of calendaring
|
37
|
-
and scheduling, is currently limited by the lack of Internet standards
|
38
|
-
for the message content types that are central to these knowledgeware
|
39
|
-
applications. This memo is intended to progress the level of
|
40
|
-
interoperability possible between dissimilar calendaring and
|
41
|
-
scheduling applications. This memo defines a MIME content type for
|
42
|
-
exchanging electronic calendaring and scheduling information. The
|
43
|
-
Internet Calendaring and Scheduling Core Object Specification, or
|
44
|
-
iCalendar, allows for the capture and exchange of information normally
|
45
|
-
stored within a calendaring and scheduling application; such as a
|
46
|
-
Personal Information Manager (PIM) or a Group Scheduling product.
|
47
|
-
|
48
|
-
The iCalendar format is suitable as an exchange format between
|
49
|
-
applications or systems. The format is defined in terms of a MIME
|
50
|
-
content type. This will enable the object to be exchanged using
|
51
|
-
several transports, including but not limited to SMTP, HTTP, a file
|
52
|
-
system, desktop interactive protocols such as the use of a memory-
|
53
|
-
based clipboard or drag/drop interactions, point-to-point asynchronous
|
54
|
-
communication, wired-network transport, or some form of unwired
|
55
|
-
transport such as infrared might also be used.
|
56
|
-
|
30
|
+
iCalendar is a Ruby library for dealing with iCalendar files in the
|
31
|
+
iCalendar format defined by [RFC-5545](http://tools.ietf.org/html/rfc5545).
|
57
32
|
|
58
33
|
EXAMPLES
|
59
34
|
---
|
60
35
|
|
61
|
-
###
|
36
|
+
### Creating calendars and events ###
|
62
37
|
|
63
38
|
require 'icalendar'
|
64
|
-
require 'date'
|
65
|
-
|
66
|
-
include Icalendar # You should do this in your class to limit namespace overlap
|
67
|
-
|
68
|
-
### Creating calendars and events ###
|
69
39
|
|
70
40
|
# Create a calendar with an event (standard method)
|
71
|
-
cal = Calendar.new
|
72
|
-
cal.event do
|
73
|
-
dtstart
|
74
|
-
dtend
|
75
|
-
summary "Meeting with the man."
|
76
|
-
description "Have a long lunch meeting and decide nothing..."
|
77
|
-
|
41
|
+
cal = Icalendar::Calendar.new
|
42
|
+
cal.event do |e|
|
43
|
+
e.dtstart = Icalendar::Values::Date.new('20050428')
|
44
|
+
e.dtend = Icalendar::Values::Date.new('20050429')
|
45
|
+
e.summary = "Meeting with the man."
|
46
|
+
e.description = "Have a long lunch meeting and decide nothing..."
|
47
|
+
e.ip_class = "PRIVATE"
|
78
48
|
end
|
79
49
|
|
80
50
|
cal.publish
|
81
51
|
|
82
52
|
#### Or you can make events like this ####
|
83
53
|
|
84
|
-
event = Event.new
|
85
|
-
event.
|
54
|
+
event = Icalendar::Event.new
|
55
|
+
event.dtstart = DateTime.civil(2006, 6, 23, 8, 30)
|
86
56
|
event.summary = "A great event!"
|
87
57
|
cal.add_event(event)
|
88
58
|
|
89
59
|
event2 = cal.event # This automatically adds the event to the calendar
|
90
|
-
event2.
|
60
|
+
event2.dtstart = DateTime.civil(2006, 6, 24, 8, 30)
|
91
61
|
event2.summary = "Another great event!"
|
92
62
|
|
93
|
-
####
|
63
|
+
#### Support for property parameters ####
|
94
64
|
|
95
|
-
params = {"
|
65
|
+
params = {"altrep" => "http://my.language.net", "language" => "SPANISH"}
|
96
66
|
|
97
|
-
cal.event do
|
98
|
-
dtstart Date.new(
|
99
|
-
dtend Date.new(
|
100
|
-
summary "This is a summary with params.", params
|
67
|
+
cal.event do |e|
|
68
|
+
e.dtstart = Icalendar::Values::Date.new('20050428')
|
69
|
+
e.dtend = Icalendar::Values::Date.new('20050429')
|
70
|
+
e.summary = Icalendar::Values::Text.new "This is a summary with params.", params
|
71
|
+
end
|
72
|
+
|
73
|
+
# or
|
74
|
+
|
75
|
+
cal.event do |e|
|
76
|
+
e.dtstart = Icalendar::Values::Date.new('20050428')
|
77
|
+
e.dtend = Icalendar::Values::Date.new('20050429')
|
78
|
+
e.summary = "This is a summary with params."
|
79
|
+
e.summary.ical_params = params
|
101
80
|
end
|
102
81
|
|
103
82
|
#### We can output the calendar as a string ####
|
@@ -110,29 +89,28 @@ ALARMS
|
|
110
89
|
|
111
90
|
### Within an event ###
|
112
91
|
|
113
|
-
cal.event do
|
92
|
+
cal.event do |e|
|
114
93
|
# ...other event properties
|
115
|
-
alarm do
|
116
|
-
action
|
117
|
-
description
|
118
|
-
summary
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
add_attach "ftp://host.com/novo-procs/felizano.exe", {"FMTTYPE" => "application/binary"} # email attachments (optional)
|
94
|
+
e.alarm do |a|
|
95
|
+
a.action = "EMAIL"
|
96
|
+
a.description = "This is an event reminder" # email body (required)
|
97
|
+
a.summary = "Alarm notification" # email subject (required)
|
98
|
+
a.attendee = %w(mailto:me@my-domain.com mailto:me-too@my-domain.com) # one or more email recipients (required)
|
99
|
+
a.append_attendee "mailto:me-three@my-domain.com"
|
100
|
+
a.trigger = "-PT15M" # 15 minutes before
|
101
|
+
a.append_attach Icalendar::Values::Uri.new "ftp://host.com/novo-procs/felizano.exe", "fmttype" => "application/binary" # email attachments (optional)
|
124
102
|
end
|
125
103
|
|
126
|
-
alarm do
|
127
|
-
action
|
128
|
-
summary
|
129
|
-
trigger
|
104
|
+
e.alarm do |a|
|
105
|
+
a.action = "DISPLAY" # This line isn't necessary, it's the default
|
106
|
+
a.summary = "Alarm notification"
|
107
|
+
a.trigger = "-P1DT0H0M0S" # 1 day before
|
130
108
|
end
|
131
109
|
|
132
|
-
alarm do
|
133
|
-
action "AUDIO"
|
134
|
-
trigger "-PT15M"
|
135
|
-
|
110
|
+
e.alarm do |a|
|
111
|
+
a.action = "AUDIO"
|
112
|
+
a.trigger = "-PT15M"
|
113
|
+
a.append_attach "Basso"
|
136
114
|
end
|
137
115
|
end
|
138
116
|
|
@@ -160,27 +138,28 @@ ALARMS
|
|
160
138
|
# TRIGGER:-PT15M
|
161
139
|
# END:VALARM
|
162
140
|
|
141
|
+
|
163
142
|
TIMEZONES
|
164
143
|
---
|
165
144
|
|
166
|
-
cal = Calendar.new
|
167
|
-
cal.timezone do
|
168
|
-
|
169
|
-
|
170
|
-
daylight do
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
dtstart
|
175
|
-
|
145
|
+
cal = Icalendar::Calendar.new
|
146
|
+
cal.timezone do |t|
|
147
|
+
t.tzid = "America/Chicago"
|
148
|
+
|
149
|
+
t.daylight do |d|
|
150
|
+
d.tzoffsetfrom = "-0600"
|
151
|
+
d.tzoffsetto = "-0500"
|
152
|
+
d.tzname = "CDT"
|
153
|
+
d.dtstart = "19700308T020000"
|
154
|
+
d.rrule = "FREQ=YEARLY;BYMONTH=3;BYDAY=2SU"
|
176
155
|
end
|
177
156
|
|
178
|
-
standard do
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
dtstart
|
183
|
-
|
157
|
+
t.standard do |s|
|
158
|
+
s.tzoffsetfrom = "-0500"
|
159
|
+
s.tzoffsetto = "-0600"
|
160
|
+
s.tzname = "CST"
|
161
|
+
s.dtstart = "19701101T020000"
|
162
|
+
s.rrule = "FREQ=YEARLY;BYMONTH=11;BYDAY=1SU"
|
184
163
|
end
|
185
164
|
end
|
186
165
|
|
@@ -204,35 +183,30 @@ TIMEZONES
|
|
204
183
|
# END:STANDARD
|
205
184
|
# END:VTIMEZONE
|
206
185
|
|
207
|
-
iCalendar has some basic support for creating VTIMEZONE blocks from timezone information pulled from `tzinfo`.
|
186
|
+
iCalendar has some basic support for creating VTIMEZONE blocks from timezone information pulled from `tzinfo`.
|
187
|
+
You must require `tzinfo` support manually to take advantage, and iCalendar only supports `tzinfo` with versions `~> 0.3`
|
208
188
|
|
209
189
|
#### Example ####
|
210
190
|
|
211
|
-
require 'tzinfo'
|
212
191
|
require 'icalendar/tzinfo'
|
213
|
-
|
214
|
-
cal = Calendar.new
|
215
|
-
|
192
|
+
|
193
|
+
cal = Icalendar::Calendar.new
|
194
|
+
|
216
195
|
event_start = DateTime.new 2008, 12, 29, 8, 0, 0
|
217
196
|
event_end = DateTime.new 2008, 12, 29, 11, 0, 0
|
218
|
-
|
197
|
+
|
219
198
|
tzid = "America/Chicago"
|
220
199
|
tz = TZInfo::Timezone.get tzid
|
221
200
|
timezone = tz.ical_timezone event_start
|
222
|
-
cal.
|
223
|
-
|
224
|
-
cal.event do
|
225
|
-
dtstart event_start.tap { |d| d.ical_params = {'TZID' => tzid} }
|
226
|
-
dtend event_end.tap { |d| d.ical_params = {'TZID' => tzid} }
|
227
|
-
summary "Meeting with the man."
|
228
|
-
description "Have a long lunch meeting and decide nothing..."
|
229
|
-
end
|
201
|
+
cal.add_timezone timezone
|
230
202
|
|
203
|
+
cal.event do |e|
|
204
|
+
e.dtstart = Icalendar::Values::DateTime.new event_start, 'tzid' => tzid
|
205
|
+
e.dtend = Icalendar::Values::DateTime.new event_end, 'tzid' => tzid
|
206
|
+
e.summary = "Meeting with the man."
|
207
|
+
e.description = "Have a long lunch meeting and decide nothing..."
|
208
|
+
end
|
231
209
|
|
232
|
-
Unicode
|
233
|
-
---
|
234
|
-
|
235
|
-
Add `$KCODE = 'u'` to make icalendar work correctly with Utf8 texts
|
236
210
|
|
237
211
|
Parsing iCalendars
|
238
212
|
---
|
@@ -244,18 +218,18 @@ Parsing iCalendars
|
|
244
218
|
# can have multiple calendars.
|
245
219
|
cals = Icalendar.parse(cal_file)
|
246
220
|
cal = cals.first
|
247
|
-
|
221
|
+
|
248
222
|
# Now you can access the cal object in just the same way I created it
|
249
223
|
event = cal.events.first
|
250
224
|
|
251
225
|
puts "start date-time: #{event.dtstart}"
|
252
|
-
puts "start date-time timezone: #{event.dtstart.
|
226
|
+
puts "start date-time timezone: #{event.dtstart.ical_params['tzid']}"
|
253
227
|
puts "summary: #{event.summary}"
|
254
228
|
|
255
229
|
# Some calendars contain non-standard parameters (e.g. Apple iCloud
|
256
230
|
# calendars). You can pass in a `strict` value when creating a new parser.
|
257
231
|
unstrict_parser = Icalendar::Parser.new(cal_file, false)
|
258
|
-
cal = unstrict_parser.parse
|
232
|
+
cal = unstrict_parser.parse
|
259
233
|
|
260
234
|
Finders
|
261
235
|
---
|
@@ -300,13 +274,14 @@ Testing
|
|
300
274
|
To run the tests:
|
301
275
|
|
302
276
|
$ bundle install
|
303
|
-
$ rake
|
277
|
+
$ rake spec
|
304
278
|
|
305
279
|
License
|
306
280
|
---
|
307
281
|
|
308
282
|
This library is released under the same license as Ruby itself.
|
309
283
|
|
284
|
+
|
310
285
|
Support & Contributions
|
311
286
|
---
|
312
287
|
|
data/Rakefile
CHANGED
@@ -1,15 +1,14 @@
|
|
1
1
|
require 'bundler'
|
2
2
|
Bundler::GemHelper.install_tasks
|
3
3
|
|
4
|
-
require '
|
5
|
-
|
6
|
-
|
7
|
-
t.verbose = true
|
8
|
-
end
|
4
|
+
require 'rspec/core/rake_task'
|
5
|
+
|
6
|
+
RSpec::Core::RakeTask.new
|
9
7
|
|
10
|
-
task default: [:
|
8
|
+
task default: [:spec, :build]
|
11
9
|
|
12
|
-
|
10
|
+
desc "Load iCalendar in IRB"
|
11
|
+
task :console do
|
13
12
|
require 'irb'
|
14
13
|
require 'irb/completion'
|
15
14
|
require 'icalendar'
|
data/icalendar.gemspec
CHANGED
@@ -1,5 +1,4 @@
|
|
1
|
-
|
2
|
-
require 'icalendar/base'
|
1
|
+
require File.join File.dirname(__FILE__), 'lib', 'icalendar', 'version'
|
3
2
|
|
4
3
|
Gem::Specification.new do |s|
|
5
4
|
s.authors = ['Ryan Ahearn']
|
@@ -10,22 +9,24 @@ Gem::Specification.new do |s|
|
|
10
9
|
|
11
10
|
s.homepage = "https://github.com/icalendar/icalendar"
|
12
11
|
s.platform = Gem::Platform::RUBY
|
13
|
-
s.summary = "A ruby implementation of the iCalendar specification (RFC-
|
12
|
+
s.summary = "A ruby implementation of the iCalendar specification (RFC-5545)."
|
14
13
|
s.description = <<-EOD
|
15
|
-
|
16
|
-
|
17
|
-
|
14
|
+
Implements the iCalendar specification (RFC-5545) in Ruby. This allows
|
15
|
+
for the generation and parsing of .ics files, which are used by a
|
16
|
+
variety of calendaring applications.
|
18
17
|
EOD
|
18
|
+
s.post_install_message = "\nHEADS UP! iCalendar 2.0 is not backwards-compatible with 1.x. Please see the README for the new syntax\n\n"
|
19
19
|
|
20
20
|
s.files = `git ls-files`.split "\n"
|
21
21
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split "\n"
|
22
22
|
s.executables = `git ls-files -- bin/*`.split("\n").map { |f| File.basename f }
|
23
23
|
s.require_paths = ['lib']
|
24
24
|
|
25
|
-
s.required_ruby_version = '>= 1.9.2'
|
26
|
-
|
27
25
|
s.add_development_dependency 'rake', '~> 10.0'
|
28
26
|
s.add_development_dependency 'bundler', '~> 1.3'
|
29
27
|
s.add_development_dependency 'tzinfo', '~> 0.3'
|
30
|
-
s.add_development_dependency '
|
28
|
+
s.add_development_dependency 'activesupport', '~> 3.2'
|
29
|
+
s.add_development_dependency 'timecop', '~> 0.7.0'
|
30
|
+
s.add_development_dependency 'rspec', '~> 2.14'
|
31
|
+
s.add_development_dependency 'simplecov', '~> 0.8'
|
31
32
|
end
|
data/lib/icalendar.rb
CHANGED
@@ -1,39 +1,23 @@
|
|
1
|
-
|
2
|
-
Copyright (C) 2005 Jeff Rose
|
1
|
+
module Icalendar
|
3
2
|
|
4
|
-
|
5
|
-
under the same terms as the ruby language itself, see the file COPYING for
|
6
|
-
details.
|
7
|
-
=end
|
3
|
+
MAX_LINE_LENGTH = 75
|
8
4
|
|
9
|
-
|
5
|
+
def self.parse(source, single = false)
|
6
|
+
calendars = Parser.new(source).parse
|
7
|
+
single ? calendars.first : calendars
|
8
|
+
end
|
10
9
|
|
11
|
-
|
10
|
+
end
|
12
11
|
|
13
|
-
|
14
|
-
require 'icalendar/
|
15
|
-
|
16
|
-
# Meta-programming helper methods
|
17
|
-
require 'meta'
|
18
|
-
|
19
|
-
# Hash attributes mixin module
|
20
|
-
require 'hash_attrs'
|
21
|
-
|
22
|
-
require 'icalendar/base'
|
12
|
+
require 'icalendar/has_properties'
|
13
|
+
require 'icalendar/has_components'
|
23
14
|
require 'icalendar/component'
|
24
|
-
require 'icalendar/
|
25
|
-
|
26
|
-
|
15
|
+
require 'icalendar/value'
|
16
|
+
require 'icalendar/alarm'
|
17
|
+
require 'icalendar/event'
|
18
|
+
require 'icalendar/todo'
|
19
|
+
require 'icalendar/journal'
|
20
|
+
require 'icalendar/freebusy'
|
21
|
+
require 'icalendar/timezone'
|
27
22
|
require 'icalendar/calendar'
|
28
|
-
require 'icalendar/
|
29
|
-
require 'icalendar/component/journal'
|
30
|
-
require 'icalendar/component/todo'
|
31
|
-
require 'icalendar/component/freebusy'
|
32
|
-
require 'icalendar/component/timezone'
|
33
|
-
require 'icalendar/component/alarm'
|
34
|
-
|
35
|
-
# Calendar parser
|
36
|
-
require 'icalendar/parser'
|
37
|
-
|
38
|
-
# TZINFO support
|
39
|
-
# require 'icalendar/tzinfo'
|
23
|
+
require 'icalendar/parser'
|