icalendar 0.95

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 (81) hide show
  1. data/COPYING +56 -0
  2. data/GPL +340 -0
  3. data/README +121 -0
  4. data/Rakefile +101 -0
  5. data/docs/api/classes/Array.html +146 -0
  6. data/docs/api/classes/Date.html +157 -0
  7. data/docs/api/classes/DateTime.html +178 -0
  8. data/docs/api/classes/Fixnum.html +146 -0
  9. data/docs/api/classes/Float.html +146 -0
  10. data/docs/api/classes/Icalendar/Alarm.html +184 -0
  11. data/docs/api/classes/Icalendar/Base.html +118 -0
  12. data/docs/api/classes/Icalendar/Calendar.html +411 -0
  13. data/docs/api/classes/Icalendar/Component.html +306 -0
  14. data/docs/api/classes/Icalendar/DateProp.html +187 -0
  15. data/docs/api/classes/Icalendar/DateProp/ClassMethods.html +195 -0
  16. data/docs/api/classes/Icalendar/Event.html +202 -0
  17. data/docs/api/classes/Icalendar/Freebusy.html +157 -0
  18. data/docs/api/classes/Icalendar/InvalidComponentClass.html +117 -0
  19. data/docs/api/classes/Icalendar/InvalidPropertyValue.html +117 -0
  20. data/docs/api/classes/Icalendar/Journal.html +190 -0
  21. data/docs/api/classes/Icalendar/Parameter.html +166 -0
  22. data/docs/api/classes/Icalendar/Parser.html +447 -0
  23. data/docs/api/classes/Icalendar/Timezone.html +197 -0
  24. data/docs/api/classes/Icalendar/Todo.html +199 -0
  25. data/docs/api/classes/String.html +160 -0
  26. data/docs/api/classes/Time.html +161 -0
  27. data/docs/api/created.rid +1 -0
  28. data/docs/api/files/COPYING.html +163 -0
  29. data/docs/api/files/GPL.html +531 -0
  30. data/docs/api/files/README.html +241 -0
  31. data/docs/api/files/lib/icalendar/base_rb.html +108 -0
  32. data/docs/api/files/lib/icalendar/calendar_rb.html +101 -0
  33. data/docs/api/files/lib/icalendar/component/alarm_rb.html +101 -0
  34. data/docs/api/files/lib/icalendar/component/event_rb.html +101 -0
  35. data/docs/api/files/lib/icalendar/component/freebusy_rb.html +101 -0
  36. data/docs/api/files/lib/icalendar/component/journal_rb.html +101 -0
  37. data/docs/api/files/lib/icalendar/component/timezone_rb.html +101 -0
  38. data/docs/api/files/lib/icalendar/component/todo_rb.html +101 -0
  39. data/docs/api/files/lib/icalendar/component_rb.html +101 -0
  40. data/docs/api/files/lib/icalendar/conversions_rb.html +108 -0
  41. data/docs/api/files/lib/icalendar/helpers_rb.html +101 -0
  42. data/docs/api/files/lib/icalendar/parameter_rb.html +101 -0
  43. data/docs/api/files/lib/icalendar/parser_rb.html +109 -0
  44. data/docs/api/files/lib/icalendar_rb.html +118 -0
  45. data/docs/api/fr_class_index.html +48 -0
  46. data/docs/api/fr_file_index.html +43 -0
  47. data/docs/api/fr_method_index.html +63 -0
  48. data/docs/api/index.html +24 -0
  49. data/docs/api/rdoc-style.css +208 -0
  50. data/docs/examples/create_cal.rb +40 -0
  51. data/docs/examples/parse_cal.rb +19 -0
  52. data/docs/examples/single_event.ics +18 -0
  53. data/docs/rfcs/rfc2425.pdf +0 -0
  54. data/docs/rfcs/rfc2426.pdf +0 -0
  55. data/docs/rfcs/rfc2445.pdf +0 -0
  56. data/docs/rfcs/rfc2446.pdf +0 -0
  57. data/docs/rfcs/rfc2447.pdf +0 -0
  58. data/docs/rfcs/rfc3283.txt +738 -0
  59. data/lib/icalendar.rb +27 -0
  60. data/lib/icalendar/#helpers.rb# +92 -0
  61. data/lib/icalendar/base.rb +31 -0
  62. data/lib/icalendar/calendar.rb +112 -0
  63. data/lib/icalendar/component.rb +253 -0
  64. data/lib/icalendar/component/alarm.rb +35 -0
  65. data/lib/icalendar/component/event.rb +68 -0
  66. data/lib/icalendar/component/freebusy.rb +35 -0
  67. data/lib/icalendar/component/journal.rb +61 -0
  68. data/lib/icalendar/component/timezone.rb +43 -0
  69. data/lib/icalendar/component/todo.rb +65 -0
  70. data/lib/icalendar/conversions.rb +115 -0
  71. data/lib/icalendar/helpers.rb +109 -0
  72. data/lib/icalendar/parameter.rb +33 -0
  73. data/lib/icalendar/parser.rb +395 -0
  74. data/test/calendar_test.rb +46 -0
  75. data/test/component/event_test.rb +47 -0
  76. data/test/component_test.rb +74 -0
  77. data/test/parser_test.rb +83 -0
  78. data/test/property_helpers.rb +35 -0
  79. data/test/simplecal.ics +119 -0
  80. data/test/single_event.ics +23 -0
  81. metadata +135 -0
@@ -0,0 +1,47 @@
1
+ $:.unshift File.join(File.dirname(__FILE__), "..", "lib")
2
+
3
+ require 'test/unit'
4
+ require 'icalendar'
5
+
6
+ # Define a test event
7
+ testEvent = <<EOS
8
+ BEGIN:VEVENT
9
+ UID:19970901T130000Z-123401@host.com
10
+ DTSTAMP:19970901T1300Z
11
+ DTSTART:19970903T163000Z
12
+ DTEND:19970903T190000Z
13
+ SUMMARY:Annual Employee Review
14
+ CLASS:PRIVATE
15
+ CATEGORIES:BUSINESS,HUMAN RESOURCES
16
+ END:VEVENT
17
+ EOS
18
+
19
+ class TestVevent < Test::Unit::TestCase
20
+
21
+ # Create a calendar with an event for each test.
22
+ def setup
23
+ @cal = Icalendar::Calendar.new
24
+ @event = Icalendar::Event.new
25
+ end
26
+
27
+ def test_new
28
+ assert(@event)
29
+ end
30
+
31
+ # Properties that can only occur once per event
32
+ def test_single_properties
33
+ @event.klass = "PRIVATE"
34
+
35
+ @cal.add(@event)
36
+
37
+ cals = Icalendar::Parser.new(@cal.to_ical).parse
38
+ cal2 = cals.first
39
+ event2 = cal2.events.first
40
+
41
+ assert_equal(event2.klass, "PRIVATE")
42
+ end
43
+
44
+ # def test_restricted_properties
45
+ # end
46
+
47
+ end
@@ -0,0 +1,74 @@
1
+ $:.unshift File.join(File.dirname(__FILE__), "..", "lib")
2
+
3
+ require 'date'
4
+ require 'test/unit'
5
+ require 'icalendar'
6
+
7
+ class TestComponent < Test::Unit::TestCase
8
+
9
+ # Create a calendar with an event for each test.
10
+ def setup
11
+ @cal = Icalendar::Calendar.new
12
+ @event = Icalendar::Event.new
13
+ end
14
+
15
+ def test_ical_property
16
+ # No alias but it does have a prop_name
17
+ assert_equal(@event.klass?, false)
18
+ @event.klass = "PRIVATE"
19
+ assert_equal(@event.klass?, true)
20
+ assert_equal(@event.klass, "PRIVATE")
21
+
22
+ # Check that both dtstart and its alias start work correctly
23
+ date = DateTime.new(2005, 02, 05, 23, 24, 25)
24
+ @event.dtend = date
25
+ assert_equal(@event.dtend.year, date.year)
26
+
27
+ date2 = DateTime.new(2005, 02, 05, 23, 24, 26)
28
+ @event.end = date2
29
+ assert_equal(@event.end.year, date2.year)
30
+ end
31
+
32
+ def test_ical_multi_property
33
+ # Query
34
+ assert_equal(@event.comments?, false)
35
+ @event.comments = []
36
+ assert_equal(@event.comments?, true)
37
+
38
+ # Should return an empty array, rather than nil
39
+ assert_equal(@event.comments.size, 0)
40
+
41
+ # Add and remove
42
+ @event.add_comment "c1"
43
+ @event.add_comment "c2"
44
+ assert_equal(@event.comments.size, 2)
45
+ assert_equal(@event.comments, ["c1", "c2"])
46
+ @event.remove_comment "c1"
47
+ assert_equal(@event.comments, ["c2"])
48
+
49
+ # Set & get whole array
50
+ foo = ["as", "df"]
51
+ @event.comments = foo
52
+ assert_equal(@event.comments, foo)
53
+
54
+ foo = ["asdf", "qwer"]
55
+ @event.comments(foo)
56
+ assert_equal(@event.comments, foo)
57
+
58
+ # Error cases
59
+ assert_raise(ArgumentError) { @event.comments("asdf") }
60
+ end
61
+
62
+ def test_bad_args
63
+ # Single property
64
+ assert_raise(NotImplementedError) do
65
+ @event.klass = {}
66
+ end
67
+
68
+ # Multi property
69
+ assert_raise(NotImplementedError) do
70
+ @event.comments = [{}]
71
+ end
72
+ end
73
+
74
+ end
@@ -0,0 +1,83 @@
1
+ $:.unshift(File.dirname(__FILE__) + '/../lib')
2
+
3
+ require 'test/unit'
4
+ require 'icalendar'
5
+
6
+ # This is a test class for the calendar parser.
7
+ class TestIcalendarParser < Test::Unit::TestCase
8
+
9
+ # First make sure that we can run the parser and get back objects.
10
+ def test_new
11
+ # Make sure we don't take invalid object types.
12
+ assert_raise(ArgumentError) { Icalendar::Parser.new(20) }
13
+
14
+ # Make sure we get an object back from parsing a file
15
+ calFile = File.open("test/single_event.ics")
16
+ cals = Icalendar::Parser.new(calFile).parse
17
+ assert(cals)
18
+ calFile.close
19
+
20
+ # Make sure we get an object back from parsing a string
21
+ calString = File.open("test/single_event.ics").read
22
+ cals = Icalendar::Parser.new(calString).parse
23
+ assert(cals)
24
+ end
25
+
26
+ # Now go through and make sure the object is correct using the
27
+ # dynamically generated raw interfaces.
28
+ def test_file_parse
29
+ calFile = File.open("test/single_event.ics")
30
+ parser = Icalendar::Parser.new(calFile)
31
+ cals = parser.parse
32
+ calFile.close
33
+ do_asserts(cals)
34
+ end
35
+
36
+ def test_string_parse
37
+ # Make sure we get an object back from parsing a string
38
+ calString = File.open("test/single_event.ics").read
39
+ cals = Icalendar::Parser.new(calString).parse
40
+ do_asserts(cals)
41
+ end
42
+
43
+ # Just a helper method so we don't have to repeat the same tests.
44
+ def do_asserts(cals)
45
+ # Should just get one calendar back.
46
+ assert_equal(1, cals.size)
47
+
48
+ cal = cals.first
49
+
50
+ # Calendar properties
51
+ assert_equal("2.0", cal.version)
52
+ assert_equal("bsprodidfortestabc123", cal.prodid)
53
+
54
+ # Now the event
55
+ assert_equal(1, cal.events.size)
56
+
57
+ event = cal.events.first
58
+ assert_equal("bsuidfortestabc123", event.uid)
59
+
60
+ summary = "This is a really long summary to test the method of unfolding lines so I'm just going to make it a whole bunch of lines."
61
+
62
+ assert_equal(summary, event.summary)
63
+
64
+ start = DateTime.parse("20050120T170000")
65
+ daend = DateTime.parse("20050120T184500")
66
+ stamp = DateTime.parse("20050118T211523Z")
67
+ assert_equal(start, event.dtstart)
68
+ assert_equal(daend, event.dtend)
69
+ assert_equal(stamp, event.dtstamp)
70
+
71
+ organizer = URI.parse("mailto:joebob@random.net")
72
+ assert_equal(organizer, event.organizer)
73
+
74
+ ats = event.attachments
75
+ assert_equal(2, ats.size)
76
+ attachment = URI.parse("http://bush.sucks.org/impeach/him.rhtml")
77
+ assert_equal(attachment, ats[0])
78
+ attachment = URI.parse("http://corporations-dominate.existence.net/why.rhtml")
79
+ assert_equal(attachment, ats[1])
80
+
81
+
82
+ end
83
+ end
@@ -0,0 +1,35 @@
1
+ module PropertyHelpers
2
+
3
+ ### Single occurrence properties
4
+
5
+ def set_klass(event)
6
+ event.klass = "PRIVATE"
7
+ event.klass = "PUBLIC"
8
+ end
9
+
10
+ def check_klass(event)
11
+ assert_equal(event.klass, "PUBLIC")
12
+ end
13
+
14
+ def set_created(event)
15
+ event.
16
+ end
17
+
18
+ # Restricted occurrence properties
19
+ def set_dtend
20
+
21
+ end
22
+
23
+ def set_duration
24
+
25
+ end
26
+
27
+ # Multiple occurrence properties
28
+ def set_attach
29
+
30
+ end
31
+
32
+ def set_attendee
33
+
34
+ end
35
+ end
@@ -0,0 +1,119 @@
1
+ BEGIN:VCALENDAR
2
+ VERSION
3
+ :2.0
4
+ PRODID
5
+ :-//Mozilla.org/NONSGML Mozilla Calendar V1.0//EN
6
+ BEGIN:VEVENT
7
+ UID
8
+ :a08863de-1dd1-11b2-9445-d6248402dd19
9
+ SUMMARY
10
+ :Hybrid Embedded Systems. This is a really long summary
11
+ to test the method of unfolding lines
12
+ so I'm just going to ma
13
+ ke it
14
+ a whole
15
+ bunch of lines.
16
+ CATEGORIES
17
+ :Personal
18
+ STATUS
19
+ :CONFIRMED
20
+ CLASS
21
+ :PRIVATE
22
+ RRULE
23
+ :FREQ=WEEKLY;INTERVAL=1;BYDAY=TH
24
+ DTSTART
25
+ :20050120T170000
26
+ DTEND
27
+ :20050120T184500
28
+ DTSTAMP
29
+ :20050118T211523Z
30
+ END:VEVENT
31
+ BEGIN:VEVENT
32
+ UID
33
+ :6226e2f6-1dd2-11b2-9ad7-9b8d2d642229
34
+ SUMMARY
35
+ :Databases
36
+ LOCATION
37
+ :ECCS 1b12
38
+ CATEGORIES
39
+ :Personal
40
+ STATUS
41
+ :CONFIRMED
42
+ CLASS
43
+ :PRIVATE
44
+ X-MOZILLA-ALARM-DEFAULT-LENGTH
45
+ :30
46
+ X-MOZILLA-LASTALARMACK
47
+ :20050118T141054
48
+ RRULE
49
+ :FREQ=WEEKLY;INTERVAL=1;BYDAY=MO,WE
50
+ DTSTART
51
+ :20050117T173000
52
+ DTEND
53
+ :20050117T184500
54
+ DTSTAMP
55
+ :20050118T210648Z
56
+ LAST-MODIFIED
57
+ :20050118T211954Z
58
+ BEGIN:VALARM
59
+ TRIGGER
60
+ ;VALUE=DURATION
61
+ :-PT30M
62
+ END:VALARM
63
+ END:VEVENT
64
+ BEGIN:VEVENT
65
+ UID
66
+ :d8f4468a-1dd1-11b2-9e0a-bbe95143dbed
67
+ SUMMARY
68
+ :Software Radios
69
+ LOCATION
70
+ :ECCR 1b06
71
+ CATEGORIES
72
+ :Personal
73
+ STATUS
74
+ :CONFIRMED
75
+ CLASS
76
+ :PRIVATE
77
+ X-MOZILLA-ALARM-DEFAULT-LENGTH
78
+ :30
79
+ X-MOZILLA-LASTALARMACK
80
+ :20050118T141351
81
+ RRULE
82
+ :FREQ=WEEKLY;INTERVAL=1;BYDAY=MO,WE
83
+ DTSTART
84
+ :20050117T100000
85
+ DTEND
86
+ :20050117T111500
87
+ DTSTAMP
88
+ :20050118T211304Z
89
+ LAST-MODIFIED
90
+ :20050118T212016Z
91
+ BEGIN:VALARM
92
+ TRIGGER
93
+ ;VALUE=DURATION
94
+ :-PT30M
95
+ END:VALARM
96
+ END:VEVENT
97
+ BEGIN:VEVENT
98
+ UID
99
+ :9acd4cc8-1dd1-11b2-a65e-b276ad1df3b9
100
+ SUMMARY
101
+ :Israel & Palestine peace accord talk...
102
+ LOCATION
103
+ :Chem. 140
104
+ CATEGORIES
105
+ :Personal
106
+ STATUS
107
+ :CONFIRMED
108
+ CLASS
109
+ :PRIVATE
110
+ DTSTART
111
+ :20050118T193000
112
+ DTEND
113
+ :20050118T203000
114
+ DTSTAMP
115
+ :20050118T212943Z
116
+ LAST-MODIFIED
117
+ :20050118T213355Z
118
+ END:VEVENT
119
+ END:VCALENDAR
@@ -0,0 +1,23 @@
1
+ BEGIN:VCALENDAR
2
+ VERSION:2.0
3
+ PRODID:bsprodidfortestabc123
4
+ BEGIN:VEVENT
5
+ UID:bsuidfortestabc123
6
+ ORGANIZER:mailto:joebob@random.net
7
+ ATTACH:http://bush.sucks.org/impeach/him.rhtml
8
+ ATTACH:http://corporations-dominate.existence.net/why.rhtml
9
+ SUMMARY:This is a really long summary
10
+ to test the method of unfolding lines
11
+ so I'm just going to ma
12
+ ke it
13
+ a whol
14
+ e
15
+ bunch of lines.
16
+ CLASS:PRIVATE
17
+ PRIORITY:2
18
+ GEO:37.386013;-122.0829322
19
+ DTSTART;TZID=US-Mountain:20050120T170000
20
+ DTEND:20050120T184500
21
+ DTSTAMP:20050118T211523Z
22
+ END:VEVENT
23
+ END:VCALENDAR
metadata ADDED
@@ -0,0 +1,135 @@
1
+ --- !ruby/object:Gem::Specification
2
+ rubygems_version: 0.8.1
3
+ specification_version: 1
4
+ name: icalendar
5
+ version: !ruby/object:Gem::Version
6
+ version: "0.95"
7
+ date: 2005-06-12
8
+ summary: A ruby implementation of the iCalendar specification (RFC-2445).
9
+ require_paths:
10
+ - lib
11
+ author: Jeff Rose
12
+ email: rosejn@gmail.com
13
+ homepage: http://icalendar.rubyforge.org/
14
+ rubyforge_project:
15
+ description: "Implements the iCalendar specification (RFC-2445) in Ruby. This allows for the
16
+ generation and parsing of .ics files, which are used by a variety of calendaring
17
+ applications."
18
+ autorequire: icalendar
19
+ default_executable:
20
+ bindir: bin
21
+ has_rdoc: true
22
+ required_ruby_version: !ruby/object:Gem::Version::Requirement
23
+ requirements:
24
+ -
25
+ - ">"
26
+ - !ruby/object:Gem::Version
27
+ version: 0.0.0
28
+ version:
29
+ platform: ruby
30
+ files:
31
+ - test/calendar_test.rb
32
+ - test/single_event.ics
33
+ - test/simplecal.ics
34
+ - test/component
35
+ - test/property_helpers.rb
36
+ - test/parser_test.rb
37
+ - test/component_test.rb
38
+ - test/component/event_test.rb
39
+ - lib/icalendar
40
+ - lib/icalendar.rb
41
+ - lib/icalendar/parser.rb
42
+ - lib/icalendar/calendar.rb
43
+ - lib/icalendar/parameter.rb
44
+ - lib/icalendar/helpers.rb
45
+ - lib/icalendar/component
46
+ - "lib/icalendar/#helpers.rb#"
47
+ - lib/icalendar/component.rb
48
+ - lib/icalendar/base.rb
49
+ - lib/icalendar/conversions.rb
50
+ - lib/icalendar/component/freebusy.rb
51
+ - lib/icalendar/component/journal.rb
52
+ - lib/icalendar/component/todo.rb
53
+ - lib/icalendar/component/event.rb
54
+ - lib/icalendar/component/alarm.rb
55
+ - lib/icalendar/component/timezone.rb
56
+ - docs/api
57
+ - docs/rfcs
58
+ - docs/examples
59
+ - docs/api/files
60
+ - docs/api/index.html
61
+ - docs/api/rdoc-style.css
62
+ - docs/api/fr_method_index.html
63
+ - docs/api/fr_class_index.html
64
+ - docs/api/fr_file_index.html
65
+ - docs/api/created.rid
66
+ - docs/api/classes
67
+ - docs/api/files/lib
68
+ - docs/api/files/GPL.html
69
+ - docs/api/files/README.html
70
+ - docs/api/files/COPYING.html
71
+ - docs/api/files/lib/icalendar
72
+ - docs/api/files/lib/icalendar_rb.html
73
+ - docs/api/files/lib/icalendar/component
74
+ - docs/api/files/lib/icalendar/parser_rb.html
75
+ - docs/api/files/lib/icalendar/component_rb.html
76
+ - docs/api/files/lib/icalendar/parameter_rb.html
77
+ - docs/api/files/lib/icalendar/calendar_rb.html
78
+ - docs/api/files/lib/icalendar/helpers_rb.html
79
+ - docs/api/files/lib/icalendar/base_rb.html
80
+ - docs/api/files/lib/icalendar/conversions_rb.html
81
+ - docs/api/files/lib/icalendar/component/journal_rb.html
82
+ - docs/api/files/lib/icalendar/component/event_rb.html
83
+ - docs/api/files/lib/icalendar/component/todo_rb.html
84
+ - docs/api/files/lib/icalendar/component/timezone_rb.html
85
+ - docs/api/files/lib/icalendar/component/alarm_rb.html
86
+ - docs/api/files/lib/icalendar/component/freebusy_rb.html
87
+ - docs/api/classes/String.html
88
+ - docs/api/classes/DateTime.html
89
+ - docs/api/classes/Icalendar
90
+ - docs/api/classes/Float.html
91
+ - docs/api/classes/Fixnum.html
92
+ - docs/api/classes/Array.html
93
+ - docs/api/classes/Time.html
94
+ - docs/api/classes/Date.html
95
+ - docs/api/classes/Icalendar/Parser.html
96
+ - docs/api/classes/Icalendar/InvalidPropertyValue.html
97
+ - docs/api/classes/Icalendar/Alarm.html
98
+ - docs/api/classes/Icalendar/Todo.html
99
+ - docs/api/classes/Icalendar/Journal.html
100
+ - docs/api/classes/Icalendar/Component.html
101
+ - docs/api/classes/Icalendar/Parameter.html
102
+ - docs/api/classes/Icalendar/Timezone.html
103
+ - docs/api/classes/Icalendar/Calendar.html
104
+ - docs/api/classes/Icalendar/Base.html
105
+ - docs/api/classes/Icalendar/Freebusy.html
106
+ - docs/api/classes/Icalendar/Event.html
107
+ - docs/api/classes/Icalendar/DateProp.html
108
+ - docs/api/classes/Icalendar/DateProp
109
+ - docs/api/classes/Icalendar/InvalidComponentClass.html
110
+ - docs/api/classes/Icalendar/DateProp/ClassMethods.html
111
+ - docs/rfcs/rfc2425.pdf
112
+ - docs/rfcs/rfc2426.pdf
113
+ - docs/rfcs/rfc2445.pdf
114
+ - docs/rfcs/rfc2446.pdf
115
+ - docs/rfcs/rfc2447.pdf
116
+ - docs/rfcs/rfc3283.txt
117
+ - docs/examples/create_cal.rb
118
+ - docs/examples/single_event.ics
119
+ - docs/examples/parse_cal.rb
120
+ - Rakefile
121
+ - README
122
+ - COPYING
123
+ - GPL
124
+ test_files: []
125
+ rdoc_options:
126
+ - "--main"
127
+ - README
128
+ extra_rdoc_files:
129
+ - README
130
+ - COPYING
131
+ - GPL
132
+ executables: []
133
+ extensions: []
134
+ requirements: []
135
+ dependencies: []