icalendar2 0.1.4 → 0.1.5

Sign up to get free protection for your applications and to get access to all the features.
@@ -7,7 +7,9 @@ module Icalendar2
7
7
  autoload :Tokens, "icalendar2/tokens"
8
8
 
9
9
  autoload :Component, "icalendar2/component"
10
+ autoload :Alarm, "icalendar2/component/alarm"
10
11
  autoload :Event, "icalendar2/component/event"
12
+ autoload :Timezone, "icalendar2/component/timezone"
11
13
  module Component
12
14
  autoload :Base, "icalendar2/component/base"
13
15
  end
@@ -44,6 +46,7 @@ module Icalendar2
44
46
 
45
47
  autoload :Property, "icalendar2/property"
46
48
  module Property
49
+ autoload :Action, "icalendar2/property/action"
47
50
  autoload :Base, "icalendar2/property/base"
48
51
  autoload :Nil, "icalendar2/property/nil"
49
52
  autoload :Attach, "icalendar2/property/attach"
@@ -57,6 +60,7 @@ module Icalendar2
57
60
  autoload :Dtend, "icalendar2/property/dtend"
58
61
  autoload :Dtstamp, "icalendar2/property/dtstamp"
59
62
  autoload :Dtstart, "icalendar2/property/dtstart"
63
+ autoload :Duration, "icalendar2/property/duration"
60
64
  autoload :Exdate, "icalendar2/property/exdate"
61
65
  autoload :Geo, "icalendar2/property/geo"
62
66
  autoload :LastMod, "icalendar2/property/last_mod"
@@ -64,12 +68,15 @@ module Icalendar2
64
68
  autoload :Organizer, "icalendar2/property/organizer"
65
69
  autoload :Priority, "icalendar2/property/priority"
66
70
  autoload :Rdate, "icalendar2/property/rdate"
71
+ autoload :Repeat, "icalendar2/property/repeat"
67
72
  autoload :Resources, "icalendar2/property/resources"
68
73
  autoload :RelatedTo, "icalendar2/property/related_to"
69
74
  autoload :Rrule, "icalendar2/property/rrule"
70
75
  autoload :Rstatus, "icalendar2/property/rstatus"
71
76
  autoload :Sequence, "icalendar2/property/sequence"
72
77
  autoload :Summary, "icalendar2/property/summary"
78
+ autoload :Trigger, "icalendar2/property/trigger"
79
+ autoload :Tzid, "icalendar2/property/tzid"
73
80
  autoload :Uid, "icalendar2/property/uid"
74
81
  end
75
82
  end
@@ -60,6 +60,18 @@ module Icalendar2
60
60
  events << event
61
61
  end
62
62
 
63
+ def timezones
64
+ @components[Timezone::VALUE]
65
+ end
66
+
67
+ def timezone(&block)
68
+ e = Timezone.new
69
+ e.instance_eval(&block)
70
+ timezones << e
71
+
72
+ e
73
+ end
74
+
63
75
  def to_ical
64
76
  str = "#{Tokens::COMPONENT_BEGIN}:#{VALUE}#{Tokens::CRLF}"
65
77
  str << body_to_ical
@@ -0,0 +1,18 @@
1
+ module Icalendar2
2
+ class Alarm < Component::Base
3
+ VALUE = "VALARM"
4
+
5
+ requires :exactly_one => [:action, :trigger]
6
+ accepts :exactly_one => [:description, :duration, :repeat]
7
+
8
+ def initialize
9
+ super
10
+ end
11
+
12
+ def to_ical
13
+ str = "#{Tokens::COMPONENT_BEGIN}:#{VALUE}#{Tokens::CRLF}"
14
+ str << properties_to_ical
15
+ str << "#{Tokens::COMPONENT_END}:#{VALUE}#{Tokens::CRLF}"
16
+ end
17
+ end
18
+ end
@@ -17,9 +17,20 @@ module Icalendar2
17
17
  end
18
18
 
19
19
  def initialize
20
+ @components = {}
20
21
  @properties = {}
21
22
  end
22
23
 
24
+ def add_component(component)
25
+ key = (component.class.to_s.downcase + 's').gsub('icalendar2::', '').to_sym
26
+
27
+ unless @components.has_key? key
28
+ @components[key] = []
29
+ end
30
+
31
+ @components[key] << component
32
+ end
33
+
23
34
  def new_uid
24
35
  "#{DateTime.now}_#{rand(999999999)}@#{Socket.gethostname}"
25
36
  end
@@ -16,17 +16,39 @@ module Icalendar2
16
16
  self.dtstamp = new_timestamp
17
17
  end
18
18
 
19
+ # Add a new alarm(s) in a block
20
+ def alarm(&block)
21
+ a = Alarm.new
22
+ self.add_component a
23
+ a.instance_eval(&block)
24
+
25
+ a
26
+ end
27
+
28
+ def alarms
29
+ @components[:alarms]
30
+ end
31
+
19
32
  def to_ical
20
33
  str = "#{Tokens::COMPONENT_BEGIN}:#{VALUE}#{Tokens::CRLF}"
21
34
  str << properties_to_ical
22
- #str << alarm_to_ical
35
+ str << alarm_to_ical
23
36
  str << "#{Tokens::COMPONENT_END}:#{VALUE}#{Tokens::CRLF}"
24
37
  end
25
38
 
39
+ def valid?
40
+ alarms ? alarms.all?(&:valid?) : true
41
+ end
42
+
26
43
  private
27
44
 
28
45
  def alarm_to_ical
29
- #alarm.print if alarm
46
+ str = ""
47
+ alarms.each do |a|
48
+ str << a.to_ical
49
+ end if alarms
50
+
51
+ str
30
52
  end
31
53
  end
32
54
  end
@@ -0,0 +1,53 @@
1
+ module Icalendar2
2
+ class Timezone < Component::Base
3
+ VALUE = "VTIMEZONE"
4
+
5
+ requires :exactly_one => [:tzid]
6
+ accepts :exactly_one => [:last_mod, :created]
7
+
8
+ def initialize
9
+ super
10
+ @components = {
11
+ Daylight::VALUE => [],
12
+ Standard::VALUE => []
13
+ }
14
+ end
15
+
16
+ def to_ical
17
+ str = "#{Tokens::COMPONENT_BEGIN}:#{VALUE}#{Tokens::CRLF}"
18
+ str << properties_to_ical
19
+ str << "#{Tokens::COMPONENT_END}:#{VALUE}#{Tokens::CRLF}"
20
+ end
21
+
22
+ def add_component(component)
23
+ key = component.class.to_s.downcase.gsub('icalendar::', '').to_sym
24
+ @components[key] = component
25
+ end
26
+
27
+ def standard(&block)
28
+ standard_time_c = Standard.new
29
+ end
30
+
31
+ def daylight(&block)
32
+ daylight_time_c = Daylight.new
33
+ end
34
+
35
+ end
36
+
37
+ class Daylight < Timezone
38
+ VALUE = "DAYLIGHT"
39
+
40
+ def initialize
41
+ super
42
+ end
43
+ end
44
+
45
+ class Standard < Timezone
46
+ VALUE = "STANDARD"
47
+
48
+ def initialize
49
+ super
50
+ end
51
+ end
52
+
53
+ end
@@ -0,0 +1,9 @@
1
+ module Icalendar2
2
+ module Property
3
+ # See http://tools.ietf.org/html/rfc5545#page-72
4
+ class Action < Base
5
+ name "ACTION"
6
+ value :types => [:text]
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ module Icalendar2
2
+ module Property
3
+ # See http://tools.ietf.org/html/rfc5545#section-3.6.6
4
+ class Duration < Base
5
+ name "DURATION"
6
+ value :types => [:text]
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ module Icalendar2
2
+ module Property
3
+ # See http://tools.ietf.org/html/rfc5545#section-3.6.6
4
+ class Repeat < Base
5
+ name "REPEAT"
6
+ value :types => [:integer]
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ module Icalendar2
2
+ module Property
3
+ # See http://tools.ietf.org/html/rfc5545#page-72
4
+ class Trigger < Base
5
+ name "TRIGGER"
6
+ value :types => [:text]
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,9 @@
1
+ module Icalendar2
2
+ module Property
3
+ # See http://tools.ietf.org/html/rfc5545#page-103
4
+ class Tzid < Base
5
+ name "TZID"
6
+ value :types => [:text]
7
+ end
8
+ end
9
+ end
@@ -1,3 +1,3 @@
1
1
  module Icalendar2
2
- VERSION = "0.1.4"
2
+ VERSION = "0.1.5"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: icalendar2
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.1.5
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-02-05 00:00:00.000000000 Z
12
+ date: 2013-02-22 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
16
- requirement: !ruby/object:Gem::Requirement
16
+ requirement: &2153728980 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,12 +21,7 @@ dependencies:
21
21
  version: '2'
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
- requirements:
27
- - - ~>
28
- - !ruby/object:Gem::Version
29
- version: '2'
24
+ version_requirements: *2153728980
30
25
  description: Borrows fromt the API used by the icalendar Ruby gem. Outputs iCalendar
31
26
  (RFC 5545) formatted text.
32
27
  email:
@@ -43,8 +38,10 @@ files:
43
38
  - lib/icalendar2/calendar_property/prodid.rb
44
39
  - lib/icalendar2/calendar_property/version.rb
45
40
  - lib/icalendar2/calendar_property.rb
41
+ - lib/icalendar2/component/alarm.rb
46
42
  - lib/icalendar2/component/base.rb
47
43
  - lib/icalendar2/component/event.rb
44
+ - lib/icalendar2/component/timezone.rb
48
45
  - lib/icalendar2/component.rb
49
46
  - lib/icalendar2/parameter/altrep.rb
50
47
  - lib/icalendar2/parameter/base.rb
@@ -57,6 +54,7 @@ files:
57
54
  - lib/icalendar2/parameter/fmttype.rb
58
55
  - lib/icalendar2/parameter.rb
59
56
  - lib/icalendar2/parser.rb
57
+ - lib/icalendar2/property/action.rb
60
58
  - lib/icalendar2/property/attach.rb
61
59
  - lib/icalendar2/property/attendee.rb
62
60
  - lib/icalendar2/property/base.rb
@@ -69,6 +67,7 @@ files:
69
67
  - lib/icalendar2/property/dtend.rb
70
68
  - lib/icalendar2/property/dtstamp.rb
71
69
  - lib/icalendar2/property/dtstart.rb
70
+ - lib/icalendar2/property/duration.rb
72
71
  - lib/icalendar2/property/exdate.rb
73
72
  - lib/icalendar2/property/geo.rb
74
73
  - lib/icalendar2/property/last_mod.rb
@@ -78,11 +77,14 @@ files:
78
77
  - lib/icalendar2/property/priority.rb
79
78
  - lib/icalendar2/property/rdate.rb
80
79
  - lib/icalendar2/property/related_to.rb
80
+ - lib/icalendar2/property/repeat.rb
81
81
  - lib/icalendar2/property/resources.rb
82
82
  - lib/icalendar2/property/rrule.rb
83
83
  - lib/icalendar2/property/rstatus.rb
84
84
  - lib/icalendar2/property/sequence.rb
85
85
  - lib/icalendar2/property/summary.rb
86
+ - lib/icalendar2/property/trigger.rb
87
+ - lib/icalendar2/property/tzid.rb
86
88
  - lib/icalendar2/property/uid.rb
87
89
  - lib/icalendar2/property.rb
88
90
  - lib/icalendar2/tokens.rb
@@ -125,7 +127,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
125
127
  version: '0'
126
128
  requirements: []
127
129
  rubyforge_project:
128
- rubygems_version: 1.8.25
130
+ rubygems_version: 1.8.10
129
131
  signing_key:
130
132
  specification_version: 3
131
133
  summary: iCalendar (RFC 5545) Ruby library