icalendar 1.5.4 → 2.0.0.beta.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (100) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +1 -1
  3. data/.rspec +2 -0
  4. data/.travis.yml +1 -2
  5. data/History.txt +2 -7
  6. data/README.md +82 -107
  7. data/Rakefile +6 -7
  8. data/icalendar.gemspec +10 -9
  9. data/lib/icalendar.rb +17 -33
  10. data/lib/icalendar/alarm.rb +35 -0
  11. data/lib/icalendar/calendar.rb +17 -100
  12. data/lib/icalendar/component.rb +41 -403
  13. data/lib/icalendar/event.rb +51 -0
  14. data/lib/icalendar/freebusy.rb +27 -0
  15. data/lib/icalendar/has_components.rb +83 -0
  16. data/lib/icalendar/has_properties.rb +156 -0
  17. data/lib/icalendar/journal.rb +39 -0
  18. data/lib/icalendar/parser.rb +75 -403
  19. data/lib/icalendar/timezone.rb +53 -0
  20. data/lib/icalendar/todo.rb +52 -0
  21. data/lib/icalendar/tzinfo.rb +30 -30
  22. data/lib/icalendar/value.rb +80 -0
  23. data/lib/icalendar/values/array.rb +43 -0
  24. data/lib/icalendar/values/binary.rb +31 -0
  25. data/lib/icalendar/values/boolean.rb +17 -0
  26. data/lib/icalendar/values/cal_address.rb +8 -0
  27. data/lib/icalendar/values/date.rb +26 -0
  28. data/lib/icalendar/values/date_time.rb +34 -0
  29. data/lib/icalendar/values/duration.rb +48 -0
  30. data/lib/icalendar/values/float.rb +17 -0
  31. data/lib/icalendar/values/integer.rb +17 -0
  32. data/lib/icalendar/values/period.rb +46 -0
  33. data/lib/icalendar/values/recur.rb +63 -0
  34. data/lib/icalendar/values/text.rb +26 -0
  35. data/lib/icalendar/values/time.rb +34 -0
  36. data/lib/icalendar/values/time_with_zone.rb +31 -0
  37. data/lib/icalendar/values/uri.rb +19 -0
  38. data/lib/icalendar/values/utc_offset.rb +39 -0
  39. data/lib/icalendar/version.rb +5 -0
  40. data/spec/alarm_spec.rb +108 -0
  41. data/spec/calendar_spec.rb +167 -0
  42. data/spec/event_spec.rb +108 -0
  43. data/{test/fixtures/folding.ics → spec/fixtures/nondefault_values.ics} +2 -2
  44. data/{test → spec}/fixtures/single_event.ics +11 -14
  45. data/spec/fixtures/timezone.ics +35 -0
  46. data/spec/freebusy_spec.rb +7 -0
  47. data/spec/journal_spec.rb +7 -0
  48. data/spec/parser_spec.rb +26 -0
  49. data/spec/roundtrip_spec.rb +40 -0
  50. data/spec/spec_helper.rb +25 -0
  51. data/spec/timezone_spec.rb +31 -0
  52. data/spec/todo_spec.rb +24 -0
  53. data/spec/tzinfo_spec.rb +85 -0
  54. data/spec/values/date_time_spec.rb +80 -0
  55. data/spec/values/duration_spec.rb +67 -0
  56. data/spec/values/period_spec.rb +47 -0
  57. data/spec/values/recur_spec.rb +47 -0
  58. data/spec/values/text_spec.rb +72 -0
  59. data/spec/values/utc_offset_spec.rb +41 -0
  60. metadata +129 -88
  61. data/GPL +0 -340
  62. data/examples/create_cal.rb +0 -45
  63. data/examples/parse_cal.rb +0 -20
  64. data/examples/single_event.ics +0 -18
  65. data/lib/hash_attrs.rb +0 -34
  66. data/lib/icalendar/base.rb +0 -47
  67. data/lib/icalendar/component/alarm.rb +0 -47
  68. data/lib/icalendar/component/event.rb +0 -131
  69. data/lib/icalendar/component/freebusy.rb +0 -38
  70. data/lib/icalendar/component/journal.rb +0 -60
  71. data/lib/icalendar/component/timezone.rb +0 -91
  72. data/lib/icalendar/component/todo.rb +0 -64
  73. data/lib/icalendar/conversions.rb +0 -107
  74. data/lib/icalendar/helpers.rb +0 -109
  75. data/lib/icalendar/parameter.rb +0 -33
  76. data/lib/icalendar/rrule.rb +0 -133
  77. data/lib/meta.rb +0 -32
  78. data/script/console +0 -10
  79. data/script/recur1.ics +0 -38
  80. data/script/tryit.rb +0 -13
  81. data/test/component/test_event.rb +0 -253
  82. data/test/component/test_timezone.rb +0 -74
  83. data/test/component/test_todo.rb +0 -31
  84. data/test/fixtures/life.ics +0 -46
  85. data/test/fixtures/nonstandard.ics +0 -25
  86. data/test/fixtures/simplecal.ics +0 -119
  87. data/test/interactive.rb +0 -17
  88. data/test/read_write.rb +0 -23
  89. data/test/test_calendar.rb +0 -167
  90. data/test/test_component.rb +0 -102
  91. data/test/test_conversions.rb +0 -104
  92. data/test/test_helper.rb +0 -7
  93. data/test/test_parameter.rb +0 -91
  94. data/test/test_parser.rb +0 -100
  95. data/test/test_tzinfo.rb +0 -83
  96. data/website/index.html +0 -70
  97. data/website/index.txt +0 -38
  98. data/website/javascripts/rounded_corners_lite.inc.js +0 -285
  99. data/website/stylesheets/screen.css +0 -159
  100. 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
@@ -4,4 +4,4 @@
4
4
  Gemfile.lock
5
5
  pkg/
6
6
  .bundle
7
- vendor/
7
+ coverage/
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --format progress
data/.travis.yml CHANGED
@@ -3,5 +3,4 @@ rvm:
3
3
  - 2.1.0
4
4
  - 2.0.0
5
5
  - 1.9.3
6
- - 1.9.2
7
- script: bundle exec rake test
6
+ script: bundle exec rake spec
data/History.txt CHANGED
@@ -1,10 +1,5 @@
1
- === 1.5.4 2014-04-27
2
- * Accidentally cut off support for Ruby 1.9.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
- [2.0beta branch](https://github.com/icalendar/icalendar/tree/2.0beta).
13
+ [master branch](https://github.com/icalendar/icalendar/tree/master).
14
14
 
15
- iCalendar 1.x (currently the master branch) will still survive for a
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-2445:
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
- ### Probably want to start with this ###
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 Date.new(2005, 04, 29)
74
- dtend Date.new(2005, 04, 28)
75
- summary "Meeting with the man."
76
- description "Have a long lunch meeting and decide nothing..."
77
- klass "PRIVATE"
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.start = DateTime.civil(2006, 6, 23, 8, 30)
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.start = DateTime.civil(2006, 6, 24, 8, 30)
60
+ event2.dtstart = DateTime.civil(2006, 6, 24, 8, 30)
91
61
  event2.summary = "Another great event!"
92
62
 
93
- #### Now with support for property parameters ####
63
+ #### Support for property parameters ####
94
64
 
95
- params = {"ALTREP" =>['"http://my.language.net"'], "LANGUAGE" => ["SPANISH"]}
65
+ params = {"altrep" => "http://my.language.net", "language" => "SPANISH"}
96
66
 
97
- cal.event do
98
- dtstart Date.new(2005, 04, 29)
99
- dtend Date.new(2005, 04, 28)
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 "EMAIL"
117
- description "This is an event reminder" # email body (required)
118
- summary "Alarm notification" # email subject (required)
119
- attendees %w(mailto:me@my-domain.com mailto:me-too@my-domain.com) # one or more email recipients (required)
120
- add_attendee "mailto:me-three@my-domain.com"
121
- remove_attendee "mailto:me@my-domain.com"
122
- trigger "-PT15M" # 15 minutes before
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 "DISPLAY" # This line isn't necessary, it's the default
128
- summary "Alarm notification"
129
- trigger "-P1DT0H0M0S" # 1 day before
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
- add_attach "Basso", {"VALUE" => ["URI"]} # only one attach allowed (optional)
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
- timezone_id "America/Chicago"
169
-
170
- daylight do
171
- timezone_offset_from "-0600"
172
- timezone_offset_to "-0500"
173
- timezone_name "CDT"
174
- dtstart "19700308TO20000"
175
- add_recurrence_rule "FREQ=YEARLY;BYMONTH=3;BYDAY=2SU"
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
- timezone_offset_from "-0500"
180
- timezone_offset_to "-0600"
181
- timezone_name "CST"
182
- dtstart "19701101T020000"
183
- add_recurrence_rule "YEARLY;BYMONTH=11;BYDAY=1SU"
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`. You must require `tzinfo` support manually to take advantage, and iCalendar only supports `tzinfo` with versions `~> 0.3`
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.add timezone
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.icalendar_tzid}" if event.dtstart.is_a?(DateTime)
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 test
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 'rake/testtask'
5
- Rake::TestTask.new do |t|
6
- t.pattern = 'test/**/test*.rb'
7
- t.verbose = true
8
- end
4
+ require 'rspec/core/rake_task'
5
+
6
+ RSpec::Core::RakeTask.new
9
7
 
10
- task default: [:test, :build]
8
+ task default: [:spec, :build]
11
9
 
12
- task :console do
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
- $:.push File.expand_path('../lib', __FILE__)
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-2445)."
12
+ s.summary = "A ruby implementation of the iCalendar specification (RFC-5545)."
14
13
  s.description = <<-EOD
15
- Implements the iCalendar specification (RFC-2445) in Ruby. This allows
16
- for the generation and parsing of .ics files, which are used by a
17
- variety of calendaring applications.
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 'timecop', '~> 0.6.3'
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
- =begin
2
- Copyright (C) 2005 Jeff Rose
1
+ module Icalendar
3
2
 
4
- This library is free software; you can redistribute it and/or modify it
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
- $:.unshift(File.dirname(__FILE__))
5
+ def self.parse(source, single = false)
6
+ calendars = Parser.new(source).parse
7
+ single ? calendars.first : calendars
8
+ end
10
9
 
11
- ### Base classes and mixin modules
10
+ end
12
11
 
13
- # to_ical methods for built-in classes
14
- require 'icalendar/conversions'
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/rrule'
25
-
26
- # Calendar and components
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/component/event'
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'