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