icalendar 1.1.1 → 1.1.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (124) hide show
  1. data/History.txt +3 -0
  2. data/Manifest.txt +61 -0
  3. data/PostInstall.txt +5 -0
  4. data/{README → README.rdoc} +4 -0
  5. data/Rakefile +28 -133
  6. data/config/website.yml +2 -0
  7. data/icalendar.gemspec +55 -0
  8. data/lib/icalendar/base.rb +2 -0
  9. data/lib/icalendar/component.rb +9 -7
  10. data/script/console +10 -0
  11. data/script/destroy +14 -0
  12. data/script/generate +14 -0
  13. data/script/recur1.ics +38 -0
  14. data/script/tryit.rb +13 -0
  15. data/script/txt2html +71 -0
  16. data/test.ical +33 -0
  17. data/test.ics +33 -0
  18. data/test.rb +48 -0
  19. data/test/component/{event_test.rb → test_event.rb} +0 -0
  20. data/test/component/{timezone_test.rb → test_timezone.rb} +1 -1
  21. data/test/component/{todo_test.rb → test_todo.rb} +0 -0
  22. data/test/fixtures/folding.ics +7 -7
  23. data/test/{calendar_test.rb → test_calendar.rb} +1 -4
  24. data/test/{component_test.rb → test_component.rb} +0 -0
  25. data/test/{conversions_test.rb → test_conversions.rb} +8 -8
  26. data/test/test_helper.rb +3 -0
  27. data/test/{parameter_test.rb → test_parameter.rb} +4 -0
  28. data/test/{parser_test.rb → test_parser.rb} +0 -0
  29. data/test2.rb +28 -0
  30. data/website/index.html +11 -0
  31. data/website/index.txt +79 -0
  32. data/website/javascripts/rounded_corners_lite.inc.js +285 -0
  33. data/website/stylesheets/screen.css +159 -0
  34. data/website/template.html.erb +50 -0
  35. metadata +135 -135
  36. data/docs/api/classes/Array.html +0 -155
  37. data/docs/api/classes/Bignum.html +0 -148
  38. data/docs/api/classes/Date.html +0 -172
  39. data/docs/api/classes/DateTime.html +0 -200
  40. data/docs/api/classes/Fixnum.html +0 -148
  41. data/docs/api/classes/Float.html +0 -148
  42. data/docs/api/classes/HashAttrs.html +0 -212
  43. data/docs/api/classes/Icalendar/Alarm.html +0 -228
  44. data/docs/api/classes/Icalendar/Base.html +0 -179
  45. data/docs/api/classes/Icalendar/Calendar.html +0 -504
  46. data/docs/api/classes/Icalendar/Component.html +0 -853
  47. data/docs/api/classes/Icalendar/DateProp.html +0 -187
  48. data/docs/api/classes/Icalendar/DateProp/ClassMethods.html +0 -195
  49. data/docs/api/classes/Icalendar/Daylight.html +0 -156
  50. data/docs/api/classes/Icalendar/Event.html +0 -671
  51. data/docs/api/classes/Icalendar/Freebusy.html +0 -266
  52. data/docs/api/classes/Icalendar/Geo.html +0 -211
  53. data/docs/api/classes/Icalendar/InvalidPropertyValue.html +0 -117
  54. data/docs/api/classes/Icalendar/Journal.html +0 -443
  55. data/docs/api/classes/Icalendar/Parameter.html +0 -166
  56. data/docs/api/classes/Icalendar/Parser.html +0 -352
  57. data/docs/api/classes/Icalendar/RRule.html +0 -428
  58. data/docs/api/classes/Icalendar/RRule/Weekday.html +0 -199
  59. data/docs/api/classes/Icalendar/Standard.html +0 -156
  60. data/docs/api/classes/Icalendar/Timezone.html +0 -450
  61. data/docs/api/classes/Icalendar/Todo.html +0 -480
  62. data/docs/api/classes/Icalendar/TzidSupport.html +0 -118
  63. data/docs/api/classes/Icalendar/UnknownComponentClass.html +0 -117
  64. data/docs/api/classes/Icalendar/UnknownPropertyMethod.html +0 -117
  65. data/docs/api/classes/Object.html +0 -272
  66. data/docs/api/classes/String.html +0 -148
  67. data/docs/api/classes/TZInfo.html +0 -119
  68. data/docs/api/classes/TZInfo/Timezone.html +0 -153
  69. data/docs/api/classes/TZInfo/TimezonePeriod.html +0 -200
  70. data/docs/api/classes/TZInfo/TimezoneTransitionInfo.html +0 -229
  71. data/docs/api/classes/Time.html +0 -180
  72. data/docs/api/classes/URI.html +0 -111
  73. data/docs/api/classes/URI/Generic.html +0 -148
  74. data/docs/api/created.rid +0 -1
  75. data/docs/api/files/COPYING.html +0 -163
  76. data/docs/api/files/GPL.html +0 -531
  77. data/docs/api/files/README.html +0 -401
  78. data/docs/api/files/lib/hash_attrs_rb.html +0 -107
  79. data/docs/api/files/lib/icalendar/base_rb.html +0 -108
  80. data/docs/api/files/lib/icalendar/calendar_rb.html +0 -101
  81. data/docs/api/files/lib/icalendar/component/alarm_rb.html +0 -101
  82. data/docs/api/files/lib/icalendar/component/event_rb.html +0 -101
  83. data/docs/api/files/lib/icalendar/component/freebusy_rb.html +0 -101
  84. data/docs/api/files/lib/icalendar/component/journal_rb.html +0 -101
  85. data/docs/api/files/lib/icalendar/component/timezone_rb.html +0 -101
  86. data/docs/api/files/lib/icalendar/component/todo_rb.html +0 -101
  87. data/docs/api/files/lib/icalendar/component_rb.html +0 -108
  88. data/docs/api/files/lib/icalendar/conversions_rb.html +0 -109
  89. data/docs/api/files/lib/icalendar/helpers_rb.html +0 -101
  90. data/docs/api/files/lib/icalendar/parameter_rb.html +0 -101
  91. data/docs/api/files/lib/icalendar/parser_rb.html +0 -110
  92. data/docs/api/files/lib/icalendar/rrule_rb.html +0 -110
  93. data/docs/api/files/lib/icalendar/tzinfo_rb.html +0 -101
  94. data/docs/api/files/lib/icalendar_rb.html +0 -121
  95. data/docs/api/files/lib/meta_rb.html +0 -107
  96. data/docs/api/fr_class_index.html +0 -64
  97. data/docs/api/fr_file_index.html +0 -47
  98. data/docs/api/fr_method_index.html +0 -123
  99. data/docs/api/index.html +0 -24
  100. data/docs/api/rdoc-style.css +0 -208
  101. data/docs/rfcs/itip_notes.txt +0 -69
  102. data/docs/rfcs/rfc2425.pdf +0 -0
  103. data/docs/rfcs/rfc2426.pdf +0 -0
  104. data/docs/rfcs/rfc2445.pdf +0 -0
  105. data/docs/rfcs/rfc2446.pdf +0 -0
  106. data/docs/rfcs/rfc2447.pdf +0 -0
  107. data/docs/rfcs/rfc3283.txt +0 -738
  108. data/test/coverage/STUB +0 -0
  109. data/test/coverage/index.html +0 -272
  110. data/test/coverage/lib-hash_attrs_rb.html +0 -235
  111. data/test/coverage/lib-icalendar-base_rb.html +0 -249
  112. data/test/coverage/lib-icalendar-calendar_rb.html +0 -324
  113. data/test/coverage/lib-icalendar-component-alarm_rb.html +0 -250
  114. data/test/coverage/lib-icalendar-component-event_rb.html +0 -353
  115. data/test/coverage/lib-icalendar-component-freebusy_rb.html +0 -245
  116. data/test/coverage/lib-icalendar-component-journal_rb.html +0 -278
  117. data/test/coverage/lib-icalendar-component-timezone_rb.html +0 -326
  118. data/test/coverage/lib-icalendar-component-todo_rb.html +0 -277
  119. data/test/coverage/lib-icalendar-component_rb.html +0 -733
  120. data/test/coverage/lib-icalendar-conversions_rb.html +0 -358
  121. data/test/coverage/lib-icalendar-parser_rb.html +0 -671
  122. data/test/coverage/lib-icalendar-rrule_rb.html +0 -357
  123. data/test/coverage/lib-icalendar_rb.html +0 -243
  124. data/test/coverage/lib-meta_rb.html +0 -234
data/script/tryit.rb ADDED
@@ -0,0 +1,13 @@
1
+ $:.unshift(File.dirname(__FILE__) + '/../lib')
2
+
3
+ require 'icalendar'
4
+
5
+ require 'date'
6
+ cal = nil
7
+
8
+ File.open(File.expand_path(File.dirname(__FILE__) + '/recur1.ics')) do |file|
9
+ cal = Icalendar.parse(file).first
10
+ end
11
+ event = cal.events.first
12
+ debugger
13
+ puts event.to_ical
data/script/txt2html ADDED
@@ -0,0 +1,71 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ load File.dirname(__FILE__) + "/../Rakefile"
4
+ require 'rubyforge'
5
+ require 'redcloth'
6
+ require 'syntax/convertors/html'
7
+ require 'erb'
8
+
9
+ download = "http://rubyforge.org/projects/#{$hoe.rubyforge_name}"
10
+ version = $hoe.version
11
+
12
+ def rubyforge_project_id
13
+ RubyForge.new.configure.autoconfig["group_ids"][$hoe.rubyforge_name]
14
+ end
15
+
16
+ class Fixnum
17
+ def ordinal
18
+ # teens
19
+ return 'th' if (10..19).include?(self % 100)
20
+ # others
21
+ case self % 10
22
+ when 1: return 'st'
23
+ when 2: return 'nd'
24
+ when 3: return 'rd'
25
+ else return 'th'
26
+ end
27
+ end
28
+ end
29
+
30
+ class Time
31
+ def pretty
32
+ return "#{mday}#{mday.ordinal} #{strftime('%B')} #{year}"
33
+ end
34
+ end
35
+
36
+ def convert_syntax(syntax, source)
37
+ return Syntax::Convertors::HTML.for_syntax(syntax).convert(source).gsub(%r!^<pre>|</pre>$!,'')
38
+ end
39
+
40
+ if ARGV.length >= 1
41
+ src, template = ARGV
42
+ template ||= File.join(File.dirname(__FILE__), '/../website/template.html.erb')
43
+ else
44
+ puts("Usage: #{File.split($0).last} source.txt [template.html.erb] > output.html")
45
+ exit!
46
+ end
47
+
48
+ template = ERB.new(File.open(template).read)
49
+
50
+ title = nil
51
+ body = nil
52
+ File.open(src) do |fsrc|
53
+ title_text = fsrc.readline
54
+ body_text_template = fsrc.read
55
+ body_text = ERB.new(body_text_template).result(binding)
56
+ syntax_items = []
57
+ body_text.gsub!(%r!<(pre|code)[^>]*?syntax=['"]([^'"]+)[^>]*>(.*?)</\1>!m){
58
+ ident = syntax_items.length
59
+ element, syntax, source = $1, $2, $3
60
+ syntax_items << "<#{element} class='syntax'>#{convert_syntax(syntax, source)}</#{element}>"
61
+ "syntax-temp-#{ident}"
62
+ }
63
+ title = RedCloth.new(title_text).to_html.gsub(%r!<.*?>!,'').strip
64
+ body = RedCloth.new(body_text).to_html
65
+ body.gsub!(%r!(?:<pre><code>)?syntax-temp-(\d+)(?:</code></pre>)?!){ syntax_items[$1.to_i] }
66
+ end
67
+ stat = File.stat(src)
68
+ created = stat.ctime
69
+ modified = stat.mtime
70
+
71
+ $stdout << template.result(binding)
data/test.ical ADDED
@@ -0,0 +1,33 @@
1
+ BEGIN:VCALENDAR
2
+ VERSION:2.0
3
+ CALSCALE:GREGORIAN
4
+ PRODID:iCalendar-Ruby
5
+ BEGIN:VTIMEZONE
6
+ TZID:America/Chicago
7
+ BEGIN:DAYLIGHT
8
+ TZOFFSETTO:-0500
9
+ RRULE:FREQ=YEARLY\;BYMONTH=3\;BYDAY=2SU
10
+ DTSTART:19700308TO20000
11
+ TZOFFSETFROM:-0600
12
+ TZNAME:CDT
13
+ END:DAYLIGHT
14
+ BEGIN:STANDARD
15
+ TZOFFSETTO:-0600
16
+ RRULE:YEARLY\;BYMONTH=11\;BYDAY=1SU
17
+ DTSTART:19701101T020000
18
+ TZOFFSETFROM:-0500
19
+ TZNAME:CST
20
+ END:STANDARD
21
+ END:VTIMEZONE
22
+ BEGIN:VEVENT
23
+ SEQUENCE:0
24
+ TZID:America/Chicago
25
+ CLASS:PRIVATE
26
+ DTEND:20081229T110000
27
+ DTSTART:20081229T080000
28
+ UID:2008-12-27T18:18:15-05:00_885675612@orac
29
+ DTSTAMP:20081227T181815
30
+ DESCRIPTION:Have a long lunch meeting and decide nothing...
31
+ SUMMARY:Meeting with the man.
32
+ END:VEVENT
33
+ END:VCALENDAR
data/test.ics ADDED
@@ -0,0 +1,33 @@
1
+ BEGIN:VCALENDAR
2
+ VERSION:2.0
3
+ CALSCALE:GREGORIAN
4
+ PRODID:iCalendar-Ruby
5
+ BEGIN:VTIMEZONE
6
+ TZID:America/Chicago
7
+ BEGIN:DAYLIGHT
8
+ TZOFFSETTO:-0500
9
+ RRULE:FREQ=YEARLY\;BYMONTH=3\;BYDAY=2SU
10
+ DTSTART:19700308TO20000
11
+ TZOFFSETFROM:-0600
12
+ TZNAME:CDT
13
+ END:DAYLIGHT
14
+ BEGIN:STANDARD
15
+ TZOFFSETTO:-0600
16
+ RRULE:YEARLY\;BYMONTH=11\;BYDAY=1SU
17
+ DTSTART:19701101T020000
18
+ TZOFFSETFROM:-0500
19
+ TZNAME:CST
20
+ END:STANDARD
21
+ END:VTIMEZONE
22
+ BEGIN:VEVENT
23
+ SEQUENCE:0
24
+ TZID:America/Chicago
25
+ CLASS:PRIVATE
26
+ DTEND;TZID=America/Chicago:20081229T110000
27
+ DTSTART;TZID=America/Chicago:20081229T080000
28
+ UID:2008-12-27T19:01:31-05:00_71550387@orac
29
+ DTSTAMP:20081227T190131
30
+ DESCRIPTION:Have a long lunch meeting and decide nothing...
31
+ SUMMARY:Meeting with the man.
32
+ END:VEVENT
33
+ END:VCALENDAR
data/test.rb ADDED
@@ -0,0 +1,48 @@
1
+ #!/usr/bin/ruby
2
+ require "rubygems"
3
+ require "icalendar"
4
+ include Icalendar
5
+
6
+
7
+ # Now, you can make timezones like this
8
+ cal = Calendar.new
9
+ cal.timezone do
10
+ timezone_id "America/Chicago"
11
+ x_lic_location "America/Chicago"
12
+
13
+ daylight do
14
+ timezone_offset_from "-0600"
15
+ timezone_offset_to "-0500"
16
+ timezone_name "CDT"
17
+ dtstart "19700308TO20000"
18
+ add_recurrence_rule "FREQ=YEARLY;BYMONTH=3;BYDAY=2SU"
19
+ end
20
+
21
+ standard do
22
+ timezone_offset_from "-0500"
23
+ timezone_offset_to "-0600"
24
+ timezone_name "CST"
25
+ dtstart "19701101T020000"
26
+ add_recurrence_rule "YEARLY;BYMONTH=11;BYDAY=1SU"
27
+ end
28
+ end
29
+
30
+ e = cal.event do
31
+ dtstart DateTime.new(2008, 12, 29, 8, 0, 0)
32
+ dtend DateTime.new(2008, 12, 29, 11, 0, 0)
33
+ summary "Meeting with the man."
34
+ description "Have a long lunch meeting and decide nothing..."
35
+ klass "PRIVATE"
36
+ end
37
+
38
+
39
+ e.dtstart = DateTime.new(2008, 12, 29, 8, 30)
40
+ e.dtend = DateTime.new(2008, 12, 29, 9, 30)
41
+ cal.events << e
42
+
43
+
44
+ #e.dtstart.ical_params = {"TZID" => "America/Chicago"}
45
+ #e.dtend.ical_params = {"TZID" => "America/Chicago"}
46
+
47
+ puts cal.to_ical
48
+
File without changes
@@ -9,7 +9,7 @@ class TestTimezone < Test::Unit::TestCase
9
9
  def setup
10
10
  @cal = Icalendar::Calendar.new
11
11
  # Define a test timezone
12
- @testTimezone = %Q(BEGIN:VTIMEZONE\r\nTZID:America/Chicago\r\nBEGIN:STANDARD\r\nTZOFFSETTO:-0600\r\nRRULE:FREQ=YEARLY\\;BYMONTH=11\\;BYDAY=1SU\r\nDTSTART:19701101T020000\r\nTZOFFSETFROM:-0500\r\nTZNAME:CST\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nTZOFFSETTO:-0500\r\nRRULE:FREQ=YEARLY\\;BYMONTH=3\\;BYDAY=2SU\r\nDTSTART:19700308TO20000\r\nTZOFFSETFROM:-0600\r\nTZNAME:CDT\r\nEND:DAYLIGHT\r\nEND:VTIMEZONE\r\n)
12
+ @testTimezone = %Q(BEGIN:VTIMEZONE\r\nTZID:America/Chicago\r\nBEGIN:STANDARD\r\nDTSTART:19701101T020000\r\nRRULE:FREQ=YEARLY\\;BYMONTH=11\\;BYDAY=1SU\r\nTZNAME:CST\r\nTZOFFSETFROM:-0500\r\nTZOFFSETTO:-0600\r\nEND:STANDARD\r\nBEGIN:DAYLIGHT\r\nDTSTART:19700308TO20000\r\nRRULE:FREQ=YEARLY\\;BYMONTH=3\\;BYDAY=2SU\r\nTZNAME:CDT\r\nTZOFFSETFROM:-0600\r\nTZOFFSETTO:-0500\r\nEND:DAYLIGHT\r\nEND:VTIMEZONE\r\n)
13
13
  end
14
14
 
15
15
  def test_new
File without changes
@@ -1,15 +1,9 @@
1
1
  BEGIN:VCALENDAR
2
- VERSION:2.0
3
2
  CALSCALE:GREGORIAN
4
3
  PRODID:iCalendar-Ruby
4
+ VERSION:2.0
5
5
  X-WR-CALNAME:Test Long Description
6
6
  BEGIN:VEVENT
7
- SEQUENCE:1001
8
- DTEND:20061215T180000
9
- URL:http://test.com/events/644
10
- DTSTART:20061215T160000
11
- UID:foobar
12
- DTSTAMP:20061215T114034
13
7
  DESCRIPTION:FULL DETAILS:\nhttp://test.com/events/570\n\nCary Brothers walk
14
8
  s the same musical ground as Pete Yorn\, Nick Drake\, Jeff Buckley and othe
15
9
  rs\; crafting emotional melodies\, with strong vocals and thoughtful lyrics
@@ -18,6 +12,12 @@ DESCRIPTION:FULL DETAILS:\nhttp://test.com/events/570\n\nCary Brothers walk
18
12
  lyrical beauty rare in a young songwriter\,&quot\; and &quot\;this soulful
19
13
  blend of everything that feels good.&quot\; Rising up around him is music\;
20
14
  transcending genres\, genders and generations.
15
+ DTEND:20061215T180000
16
+ DTSTAMP:20061215T114034
17
+ DTSTART:20061215T160000
18
+ SEQUENCE:1001
21
19
  SUMMARY:DigiWorld 2006
20
+ UID:foobar
21
+ URL:http://test.com/events/644
22
22
  END:VEVENT
23
23
  END:VCALENDAR
@@ -1,7 +1,4 @@
1
- $:.unshift(File.dirname(__FILE__) + '/../lib')
2
-
3
- require 'test/unit'
4
- require 'icalendar'
1
+ require File.dirname(__FILE__) + '/test_helper.rb'
5
2
 
6
3
  require 'date'
7
4
 
File without changes
@@ -10,20 +10,20 @@ class TestConversions < Test::Unit::TestCase
10
10
 
11
11
  RESULT = <<EOS
12
12
  BEGIN:VCALENDAR
13
- VERSION:2.0
14
13
  CALSCALE:GREGORIAN
15
14
  PRODID:iCalendar-Ruby
15
+ VERSION:2.0
16
16
  BEGIN:VEVENT
17
- SEQUENCE:2
18
- ORGANIZER:mailto:joe@example.com?subject=Ruby
19
- DTSTART:20060720
20
- UID:foobar
21
- X-TIME-OF-DAY:101736
22
- GEO:46.01\\;8.57
23
- DTSTAMP:20060720T174052
24
17
  CATEGORIES:foo\\,bar\\,baz
25
18
  DESCRIPTION:desc
19
+ DTSTAMP:20060720T174052
20
+ DTSTART:20060720
21
+ GEO:46.01\\;8.57
26
22
  LAST-MODIFIED:19960817T133000
23
+ ORGANIZER:mailto:joe@example.com?subject=Ruby
24
+ SEQUENCE:2
25
+ UID:foobar
26
+ X-TIME-OF-DAY:101736
27
27
  END:VEVENT
28
28
  END:VCALENDAR
29
29
  EOS
@@ -0,0 +1,3 @@
1
+ require 'stringio'
2
+ require 'test/unit'
3
+ require File.dirname(__FILE__) + '/../lib/icalendar'
@@ -1,6 +1,7 @@
1
1
  # Test out property parameter functionality
2
2
  $:.unshift File.join(File.dirname(__FILE__), "..", "lib")
3
3
 
4
+ require 'pp'
4
5
  require 'date'
5
6
  require 'test/unit'
6
7
  require 'icalendar'
@@ -15,14 +16,17 @@ class TestComponent < Test::Unit::TestCase
15
16
 
16
17
  def test_property_parameters
17
18
  params = {"ALTREP" =>['"http://my.language.net"'], "LANGUAGE" => ["SPANISH"]}
19
+ # params = {"ALTREP" =>["foo"], "LANGUAGE" => ["SPANISH"]}
18
20
  @event.summary("This is a test summary.", params)
19
21
 
20
22
  assert_equal params, @event.summary.ical_params
21
23
 
22
24
  @cal.add_event @event
23
25
  cal_str = @cal.to_ical
26
+ puts cal_str
24
27
 
25
28
  cals = Icalendar::Parser.new(cal_str).parse
29
+ pp cals
26
30
  event = cals.first.events.first
27
31
  assert_equal params, event.summary.ical_params
28
32
  end
File without changes
data/test2.rb ADDED
@@ -0,0 +1,28 @@
1
+ #!/usr/bin/ruby
2
+ require "rubygems"
3
+ require "icalendar"
4
+ require "tzinfo"
5
+ require "icalendar/tzinfo"
6
+ include Icalendar
7
+
8
+
9
+ # Now, you can make timezones like this
10
+ tz = TZInfo::Timezone.get("America/Chicago")
11
+
12
+ cal = Calendar.new
13
+
14
+ cal.add(tz.ical_timezone(DateTime.now))
15
+
16
+ e = cal.event do
17
+ dtstart DateTime.new(2008, 12, 29, 8, 0, 0)
18
+ dtend DateTime.new(2008, 12, 29, 11, 0, 0)
19
+ summary "Meeting with the man."
20
+ description "Have a long lunch meeting and decide nothing..."
21
+ klass "PRIVATE"
22
+ end
23
+
24
+ #e.dtstart.ical_params = {"TZID" => "America/Chicago"}
25
+ #e.dtend.ical_params = {"TZID" => "America/Chicago"}
26
+
27
+ puts cal.to_ical
28
+
@@ -0,0 +1,11 @@
1
+ <html>
2
+ <head>
3
+ <meta http-equiv="Content-type" content="text/html; charset=utf-8">
4
+ <title>icalendar</title>
5
+
6
+ </head>
7
+ <body id="body">
8
+ <p>This page has not yet been created for RubyGem <code>icalendar</code></p>
9
+ <p>To the developer: To generate it, update website/index.txt and run the rake task <code>website</code> to generate this <code>index.html</code> file.</p>
10
+ </body>
11
+ </html>
data/website/index.txt ADDED
@@ -0,0 +1,79 @@
1
+ h1. icalendar
2
+
3
+
4
+ h2. What
5
+
6
+
7
+ h2. Installing
8
+
9
+ <pre syntax="ruby">sudo gem install icalendar</pre>
10
+
11
+ h2. The basics
12
+
13
+
14
+ h2. Demonstration of usage
15
+
16
+
17
+
18
+ h2. Forum
19
+
20
+ "http://groups.google.com/group/icalendar":http://groups.google.com/group/icalendar
21
+
22
+ TODO - create Google Group - icalendar
23
+
24
+ h2. How to submit patches
25
+
26
+ Read the "8 steps for fixing other people's code":http://drnicwilliams.com/2007/06/01/8-steps-for-fixing-other-peoples-code/ and for section "8b: Submit patch to Google Groups":http://drnicwilliams.com/2007/06/01/8-steps-for-fixing-other-peoples-code/#8b-google-groups, use the Google Group above.
27
+
28
+ TODO - pick SVN or Git instructions
29
+
30
+ The trunk repository is <code>svn://rubyforge.org/var/svn/icalendar/trunk</code> for anonymous access.
31
+
32
+ OOOORRRR
33
+
34
+ You can fetch the source from either:
35
+
36
+ <% if rubyforge_project_id %>
37
+
38
+ * rubyforge: "http://rubyforge.org/scm/?group_id=<%= rubyforge_project_id %>":http://rubyforge.org/scm/?group_id=<%= rubyforge_project_id %>
39
+
40
+ <pre>git clone git://rubyforge.org/icalendar.git</pre>
41
+
42
+ <% else %>
43
+
44
+ * rubyforge: MISSING IN ACTION
45
+
46
+ TODO - You can not created a RubyForge project, OR have not run <code>rubyforge config</code>
47
+ yet to refresh your local rubyforge data with this projects' id information.
48
+
49
+ When you do this, this message will magically disappear!
50
+
51
+ Or you can hack website/index.txt and make it all go away!!
52
+
53
+ <% end %>
54
+
55
+ * github: "http://github.com/sdague/icalendar/tree/master":http://github.com/sdague/icalendar/tree/master
56
+
57
+ <pre>git clone git://github.com/sdague/icalendar.git</pre>
58
+
59
+
60
+
61
+ * gitorious: "git://gitorious.org/icalendar/mainline.git":git://gitorious.org/icalendar/mainline.git
62
+
63
+ <pre>git clone git://gitorious.org/icalendar/mainline.git</pre>
64
+
65
+ h3. Build and test instructions
66
+
67
+ <pre>cd icalendar
68
+ rake test
69
+ rake install_gem</pre>
70
+
71
+
72
+ h2. License
73
+
74
+ This code is free to use under the terms of the MIT license.
75
+
76
+ h2. Contact
77
+
78
+ Comments are welcome. Send an email to "FIXME full name":mailto:FIXME email via the "forum":http://groups.google.com/group/icalendar
79
+