ri_cal 0.8.5 → 0.8.6
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.
- data/History.txt +7 -0
- data/Rakefile +59 -46
- data/VERSION +1 -0
- data/component_attributes/component_property_defs.yml +3 -3
- data/lib/ri_cal/component/t_z_info_timezone.rb +17 -3
- data/lib/ri_cal/core_extensions/date/conversions.rb +0 -14
- data/lib/ri_cal/core_extensions/date_time/conversions.rb +0 -6
- data/lib/ri_cal/fast_date_time.rb +8 -0
- data/lib/ri_cal/properties/alarm.rb +8 -8
- data/lib/ri_cal/properties/calendar.rb +3 -3
- data/lib/ri_cal/properties/event.rb +62 -65
- data/lib/ri_cal/properties/freebusy.rb +19 -20
- data/lib/ri_cal/properties/journal.rb +50 -53
- data/lib/ri_cal/properties/timezone.rb +10 -11
- data/lib/ri_cal/properties/timezone_period.rb +10 -10
- data/lib/ri_cal/properties/todo.rb +68 -71
- data/lib/ri_cal/property_value.rb +1 -0
- data/lib/ri_cal/property_value/date.rb +4 -0
- data/lib/ri_cal/property_value/date_time.rb +8 -0
- data/lib/ri_cal/property_value/recurrence_rule/occurrence_incrementer.rb +4 -3
- data/lib/ri_cal/property_value/recurrence_rule/occurrence_incrementer/by_day_incrementer.rb +5 -1
- data/lib/ri_cal/property_value/recurrence_rule/occurrence_incrementer/by_monthday_incrementer.rb +1 -1
- data/lib/ri_cal/property_value/recurrence_rule/occurrence_incrementer/by_numbered_day_incrementer.rb +5 -1
- data/lib/ri_cal/property_value/recurrence_rule/occurrence_incrementer/by_weekno_incrementer.rb +5 -1
- data/lib/ri_cal/property_value/recurrence_rule/occurrence_incrementer/frequency_incrementer.rb +9 -0
- data/lib/ri_cal/property_value/recurrence_rule/occurrence_incrementer/list_incrementer.rb +11 -1
- data/lib/ri_cal/property_value/recurrence_rule/occurrence_incrementer/null_sub_cycle_incrementer.rb +4 -0
- data/lib/ri_cal/property_value/recurrence_rule/recurring_month_day.rb +5 -1
- data/lib/ri_cal/property_value/recurrence_rule/recurring_year_day.rb +5 -1
- data/lib/ri_cal/property_value/zulu_date_time.rb +34 -0
- data/parked_specs/ri_cal/claudio_a_bug_spec.rb +100 -0
- data/ri_cal.gemspec +218 -21
- data/spec/ri_cal/component/event_spec.rb +17 -0
- data/spec/ri_cal/component/t_z_info_timezone_spec.rb +5 -4
- data/spec/ri_cal/fast_date_time_spec.rb +10 -0
- data/spec/ri_cal/inf_loop_spec.rb +78 -0
- data/spec/ri_cal/parser_spec.rb +3 -3
- metadata +61 -60
data/History.txt
CHANGED
@@ -1,3 +1,10 @@
|
|
1
|
+
=== 0.8.6
|
2
|
+
Fixes an issue of RFC 2445 non-conformance - change management time attributes (dtstamp, last_modified, and created) MUST be zulu time
|
3
|
+
Changed VTIMEZONE export from tz_info
|
4
|
+
Discovered that RFC 2445 expects a timezone period onset to be local time before the change, while TZInfo gives it after the change
|
5
|
+
Thanks to both Michael Hale and H. Wade Minter for reporting this.
|
6
|
+
Changed from generating a single RDATE line for a timezone period with multiple values to multiple RDATE lines
|
7
|
+
to fix a problem reported by Michael Hale.
|
1
8
|
=== 0.8.5
|
2
9
|
Fixes http://rick_denatale.lighthouseapp.com/projects/30941/tickets/26
|
3
10
|
events with date parameters failing
|
data/Rakefile
CHANGED
@@ -1,53 +1,66 @@
|
|
1
|
-
#- ©2009 Rick DeNatale
|
2
|
-
#- All rights reserved. Refer to the file README.txt for the license
|
3
|
-
#
|
4
|
-
# %w[rubygems rake rake/clean fileutils newgem rubigen].each { |f| require f }
|
5
|
-
#require File.dirname(__FILE__) + '/lib/ri_cal'
|
6
|
-
|
7
1
|
require 'rubygems'
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
require '
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
[
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
2
|
+
require 'rake'
|
3
|
+
|
4
|
+
begin
|
5
|
+
require 'jeweler'
|
6
|
+
Jeweler::Tasks.new do |gem|
|
7
|
+
gem.name = "ri_cal"
|
8
|
+
gem.summary = %Q{a new implementation of RFC2445 in Ruby}
|
9
|
+
gem.description = %Q{A new Ruby implementation of RFC2445 iCalendar.
|
10
|
+
|
11
|
+
The existing Ruby iCalendar libraries (e.g. icalendar, vpim) provide for parsing and generating icalendar files,
|
12
|
+
but do not support important things like enumerating occurrences of repeating events.
|
13
|
+
|
14
|
+
This is a clean-slate implementation of RFC2445.
|
15
|
+
|
16
|
+
A Google group for discussion of this library has been set up http://groups.google.com/group/rical_gem
|
17
|
+
}
|
18
|
+
gem.email = "rick.denatale@gmail.com"
|
19
|
+
gem.homepage = "http://github.com/rubyredrick/ri_cal"
|
20
|
+
gem.authors = ["Rick DeNatale"]
|
21
|
+
['.gitignore', 'performance_data/*', 'sample_ical_files/*', 'website/*', 'config/website.yml'].each do |excl|
|
22
|
+
gem.files.exclude excl
|
23
|
+
end
|
24
|
+
gem.extra_rdoc_files.include %w{History.txt copyrights.txt}
|
25
|
+
# gem.add_development_dependency "thoughtbot-shoulda", ">= 0"
|
26
|
+
# gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
|
27
|
+
end
|
28
|
+
Jeweler::GemcutterTasks.new
|
29
|
+
rescue LoadError
|
30
|
+
puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
|
31
|
+
end
|
32
|
+
|
33
|
+
require 'rake/testtask'
|
34
|
+
Rake::TestTask.new(:test) do |test|
|
35
|
+
test.libs << 'lib' << 'test'
|
36
|
+
test.pattern = 'test/**/test_*.rb'
|
37
|
+
test.verbose = true
|
33
38
|
end
|
34
39
|
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
# Override hoe's standard spec task
|
49
|
-
remove_task :spec
|
40
|
+
begin
|
41
|
+
require 'rcov/rcovtask'
|
42
|
+
Rcov::RcovTask.new do |test|
|
43
|
+
test.libs << 'test'
|
44
|
+
test.pattern = 'test/**/test_*.rb'
|
45
|
+
test.verbose = true
|
46
|
+
end
|
47
|
+
rescue LoadError
|
48
|
+
task :rcov do
|
49
|
+
abort "RCov is not available. In order to run rcov, you must: sudo gem install spicycode-rcov"
|
50
|
+
end
|
51
|
+
end
|
50
52
|
|
51
53
|
Dir['tasks/**/*.rake'].each { |t| load t }
|
52
54
|
|
53
55
|
task :default => [:"spec:with_tzinfo_gem", :"spec:with_active_support"]
|
56
|
+
|
57
|
+
|
58
|
+
require 'rake/rdoctask'
|
59
|
+
Rake::RDocTask.new do |rdoc|
|
60
|
+
version = File.exist?('VERSION') ? File.read('VERSION') : ""
|
61
|
+
|
62
|
+
rdoc.rdoc_dir = 'rdoc'
|
63
|
+
rdoc.title = "ri_cal #{version}"
|
64
|
+
rdoc.rdoc_files.include('README*')
|
65
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
66
|
+
end
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.8.6
|
@@ -160,16 +160,16 @@ trigger:
|
|
160
160
|
rfc_ref: '4.8.6.3 p 127-129'
|
161
161
|
created:
|
162
162
|
purpose: This property specifies the date and time that the calendar information was created by teh calendar user agent in the calendar store.
|
163
|
-
type:
|
163
|
+
type: ZuluDateTime
|
164
164
|
rfc_ref: '4.8.7.1 pp 129-130'
|
165
165
|
dtstamp:
|
166
166
|
purpose: This property indicates the date/time that the instance of the iCalendar object was created.
|
167
|
-
type:
|
167
|
+
type: ZuluDateTime
|
168
168
|
auto_set: to_ical
|
169
169
|
rfc_ref: '4.8.7.2 pp 130-131'
|
170
170
|
last-modified:
|
171
171
|
purpose: This property specifies the date and time that the information associated with the calendar component was last revised in teh calendar store.
|
172
|
-
type:
|
172
|
+
type: ZuluDateTime
|
173
173
|
rfc_ref: '4.8.7.3 p 131'
|
174
174
|
sequence:
|
175
175
|
purpose: This property defines the revision sequence number of the calendar component within a sequence of revisions.
|
@@ -10,10 +10,11 @@ class RiCal::Component::TZInfoTimezone < RiCal::Component::Timezone
|
|
10
10
|
|
11
11
|
def initialize(which, this_period, prev_period)
|
12
12
|
@which = which
|
13
|
-
@onset = period_local_start(this_period)
|
14
13
|
if prev_period
|
14
|
+
@onset = period_local_end(prev_period)
|
15
15
|
@offset_from = format_rfc2445_offset(prev_period.utc_total_offset)
|
16
16
|
else
|
17
|
+
@onset = period_local_start(this_period)
|
17
18
|
@offset_from = format_rfc2445_offset(this_period.utc_total_offset)
|
18
19
|
end
|
19
20
|
@offset_to = format_rfc2445_offset(this_period.utc_total_offset)
|
@@ -21,8 +22,19 @@ class RiCal::Component::TZInfoTimezone < RiCal::Component::Timezone
|
|
21
22
|
@rdates = []
|
22
23
|
end
|
23
24
|
|
25
|
+
def daylight?
|
26
|
+
@which == "DAYLIGHT"
|
27
|
+
end
|
28
|
+
|
29
|
+
def period_local_end(period)
|
30
|
+
(period.local_end || DateTime.parse("99990101T000000")).strftime("%Y%m%dT%H%M%S")
|
31
|
+
end
|
32
|
+
|
33
|
+
# This assumes a 1 hour shift which is why we use the previous period local end when
|
34
|
+
# possible
|
24
35
|
def period_local_start(period)
|
25
|
-
|
36
|
+
shift = daylight? ? Rational(-1, 24) : Rational(1, 24)
|
37
|
+
((period.local_start || DateTime.parse("16010101T000000")) + shift).strftime("%Y%m%dT%H%M%S")
|
26
38
|
end
|
27
39
|
|
28
40
|
def add_period(this_period)
|
@@ -41,7 +53,9 @@ class RiCal::Component::TZInfoTimezone < RiCal::Component::Timezone
|
|
41
53
|
def export_to(export_stream)
|
42
54
|
export_stream.puts "BEGIN:#{@which}"
|
43
55
|
export_stream.puts "DTSTART:#{@onset}"
|
44
|
-
|
56
|
+
@rdates.each do |rdate|
|
57
|
+
export_stream.puts "RDATE:#{rdate}"
|
58
|
+
end
|
45
59
|
export_stream.puts "TZOFFSETFROM:#{@offset_from}"
|
46
60
|
export_stream.puts "TZOFFSETTO:#{@offset_to}"
|
47
61
|
export_stream.puts "TZNAME:#{@abbreviation}"
|
@@ -38,20 +38,6 @@ module RiCal
|
|
38
38
|
self
|
39
39
|
end if RUBY_VERSION < '1.9'
|
40
40
|
|
41
|
-
# Converts a Date instance to a Time, where the time is set to the beginning of the day.
|
42
|
-
# The timezone can be either :local or :utc (default :local).
|
43
|
-
#
|
44
|
-
# ==== Examples
|
45
|
-
# date = Date.new(2007, 11, 10) # => Sat, 10 Nov 2007
|
46
|
-
#
|
47
|
-
# date.to_time # => Sat Nov 10 00:00:00 0800 2007
|
48
|
-
# date.to_time(:local) # => Sat Nov 10 00:00:00 0800 2007
|
49
|
-
#
|
50
|
-
# date.to_time(:utc) # => Sat Nov 10 00:00:00 UTC 2007
|
51
|
-
def to_time(form = :local)
|
52
|
-
::Time.send("#{form}_time", year, month, day)
|
53
|
-
end
|
54
|
-
|
55
41
|
# Converts a Date instance to a DateTime, where the time is set to the beginning of the day
|
56
42
|
# and UTC offset is set to 0.
|
57
43
|
#
|
@@ -38,12 +38,6 @@ module RiCal
|
|
38
38
|
::Date.new(year, month, day)
|
39
39
|
end
|
40
40
|
|
41
|
-
# Attempts to convert self to a Ruby Time object; returns self if out of range of Ruby Time class
|
42
|
-
# If self has an offset other than 0, self will just be returned unaltered, since there's no clean way to map it to a Time
|
43
|
-
def to_time
|
44
|
-
self.offset == 0 ? ::Time.utc_time(year, month, day, hour, min, sec) : self
|
45
|
-
end
|
46
|
-
|
47
41
|
# To be able to keep Times, Dates and DateTimes interchangeable on conversions
|
48
42
|
def to_datetime
|
49
43
|
self
|
@@ -112,6 +112,14 @@ module RiCal
|
|
112
112
|
# end
|
113
113
|
# end
|
114
114
|
|
115
|
+
def utc
|
116
|
+
if offset == 0
|
117
|
+
self
|
118
|
+
else
|
119
|
+
advance(:seconds => -offset, :offset => 0)
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
115
123
|
def hms_to_seconds(hours, minutes, seconds)
|
116
124
|
seconds + 60 *(minutes + (60 * hours))
|
117
125
|
end
|
@@ -332,26 +332,26 @@ module RiCal
|
|
332
332
|
end
|
333
333
|
|
334
334
|
def export_properties_to(export_stream) #:nodoc:
|
335
|
-
export_prop_to(export_stream, "ACTION", @action_property)
|
336
|
-
export_prop_to(export_stream, "ATTENDEE", @attendee_property)
|
337
335
|
export_prop_to(export_stream, "DURATION", @duration_property)
|
336
|
+
export_prop_to(export_stream, "ATTENDEE", @attendee_property)
|
338
337
|
export_prop_to(export_stream, "TRIGGER", @trigger_property)
|
339
338
|
export_prop_to(export_stream, "DESCRIPTION", @description_property)
|
340
339
|
export_prop_to(export_stream, "SUMMARY", @summary_property)
|
341
340
|
export_prop_to(export_stream, "REPEAT", @repeat_property)
|
342
341
|
export_prop_to(export_stream, "ATTACH", @attach_property)
|
342
|
+
export_prop_to(export_stream, "ACTION", @action_property)
|
343
343
|
end
|
344
344
|
|
345
345
|
def ==(o) #:nodoc:
|
346
346
|
if o.class == self.class
|
347
|
-
(action_property == o.action_property) &&
|
348
|
-
(attendee_property == o.attendee_property) &&
|
349
347
|
(duration_property == o.duration_property) &&
|
348
|
+
(attendee_property == o.attendee_property) &&
|
350
349
|
(trigger_property == o.trigger_property) &&
|
351
350
|
(description_property == o.description_property) &&
|
352
351
|
(summary_property == o.summary_property) &&
|
353
352
|
(repeat_property == o.repeat_property) &&
|
354
|
-
(attach_property == o.attach_property)
|
353
|
+
(attach_property == o.attach_property) &&
|
354
|
+
(action_property == o.action_property)
|
355
355
|
else
|
356
356
|
super
|
357
357
|
end
|
@@ -359,14 +359,14 @@ module RiCal
|
|
359
359
|
|
360
360
|
def initialize_copy(o) #:nodoc:
|
361
361
|
super
|
362
|
-
action_property = action_property && action_property.dup
|
363
|
-
attendee_property = attendee_property && attendee_property.dup
|
364
362
|
duration_property = duration_property && duration_property.dup
|
363
|
+
attendee_property = attendee_property && attendee_property.dup
|
365
364
|
trigger_property = trigger_property && trigger_property.dup
|
366
365
|
description_property = description_property && description_property.dup
|
367
366
|
summary_property = summary_property && summary_property.dup
|
368
367
|
repeat_property = repeat_property && repeat_property.dup
|
369
368
|
attach_property = attach_property && attach_property.dup
|
369
|
+
action_property = action_property && action_property.dup
|
370
370
|
end
|
371
371
|
|
372
372
|
def add_date_times_to(required_timezones) #:nodoc:
|
@@ -374,7 +374,7 @@ module RiCal
|
|
374
374
|
|
375
375
|
module ClassMethods #:nodoc:
|
376
376
|
def property_parser #:nodoc:
|
377
|
-
{"ACTION"=>:action_property_from_string, "
|
377
|
+
{"ACTION"=>:action_property_from_string, "REPEAT"=>:repeat_property_from_string, "ATTENDEE"=>:attendee_property_from_string, "TRIGGER"=>:trigger_property_from_string, "ATTACH"=>:attach_property_from_string, "SUMMARY"=>:summary_property_from_string, "DESCRIPTION"=>:description_property_from_string, "DURATION"=>:duration_property_from_string}
|
378
378
|
end
|
379
379
|
end
|
380
380
|
|
@@ -118,16 +118,16 @@ module RiCal
|
|
118
118
|
|
119
119
|
|
120
120
|
def export_properties_to(export_stream) #:nodoc:
|
121
|
-
export_prop_to(export_stream, "PRODID", @prodid_property)
|
122
121
|
export_prop_to(export_stream, "CALSCALE", @calscale_property)
|
122
|
+
export_prop_to(export_stream, "PRODID", @prodid_property)
|
123
123
|
export_prop_to(export_stream, "VERSION", @version_property)
|
124
124
|
export_prop_to(export_stream, "METHOD", @method_property)
|
125
125
|
end
|
126
126
|
|
127
127
|
def ==(o) #:nodoc:
|
128
128
|
if o.class == self.class
|
129
|
-
(prodid_property == o.prodid_property) &&
|
130
129
|
(calscale_property == o.calscale_property) &&
|
130
|
+
(prodid_property == o.prodid_property) &&
|
131
131
|
(version_property == o.version_property) &&
|
132
132
|
(method_property == o.method_property)
|
133
133
|
else
|
@@ -137,8 +137,8 @@ module RiCal
|
|
137
137
|
|
138
138
|
def initialize_copy(o) #:nodoc:
|
139
139
|
super
|
140
|
-
prodid_property = prodid_property && prodid_property.dup
|
141
140
|
calscale_property = calscale_property && calscale_property.dup
|
141
|
+
prodid_property = prodid_property && prodid_property.dup
|
142
142
|
version_property = version_property && version_property.dup
|
143
143
|
method_property = method_property && method_property.dup
|
144
144
|
end
|
@@ -41,7 +41,7 @@ module RiCal
|
|
41
41
|
|
42
42
|
|
43
43
|
# return the the CREATED property
|
44
|
-
# which will be an instances of RiCal::
|
44
|
+
# which will be an instances of RiCal::PropertyValueZuluDateTime
|
45
45
|
#
|
46
46
|
# [purpose (from RFC 2445)]
|
47
47
|
# This property specifies the date and time that the calendar information was created by teh calendar user agent in the calendar store.
|
@@ -52,24 +52,24 @@ module RiCal
|
|
52
52
|
end
|
53
53
|
|
54
54
|
# set the CREATED property
|
55
|
-
# property value should be an instance of RiCal::
|
55
|
+
# property value should be an instance of RiCal::PropertyValueZuluDateTime
|
56
56
|
def created_property=(property_value)
|
57
|
-
@created_property = property_value
|
57
|
+
@created_property = property_value
|
58
58
|
end
|
59
59
|
|
60
60
|
# set the value of the CREATED property
|
61
61
|
def created=(ruby_value)
|
62
|
-
self.created_property= RiCal::PropertyValue::
|
62
|
+
self.created_property= RiCal::PropertyValue::ZuluDateTime.convert(self, ruby_value)
|
63
63
|
end
|
64
64
|
|
65
65
|
# return the value of the CREATED property
|
66
|
-
# which will be an instance of
|
66
|
+
# which will be an instance of ZuluDateTime
|
67
67
|
def created
|
68
68
|
created_property ? created_property.ruby_value : nil
|
69
69
|
end
|
70
70
|
|
71
71
|
def created_property_from_string(line) # :nodoc:
|
72
|
-
@created_property = RiCal::PropertyValue::
|
72
|
+
@created_property = RiCal::PropertyValue::ZuluDateTime.new(self, line)
|
73
73
|
end
|
74
74
|
|
75
75
|
|
@@ -173,7 +173,7 @@ module RiCal
|
|
173
173
|
|
174
174
|
|
175
175
|
# return the the LAST-MODIFIED property
|
176
|
-
# which will be an instances of RiCal::
|
176
|
+
# which will be an instances of RiCal::PropertyValueZuluDateTime
|
177
177
|
#
|
178
178
|
# [purpose (from RFC 2445)]
|
179
179
|
# This property specifies the date and time that the information associated with the calendar component was last revised in teh calendar store.
|
@@ -184,24 +184,24 @@ module RiCal
|
|
184
184
|
end
|
185
185
|
|
186
186
|
# set the LAST-MODIFIED property
|
187
|
-
# property value should be an instance of RiCal::
|
187
|
+
# property value should be an instance of RiCal::PropertyValueZuluDateTime
|
188
188
|
def last_modified_property=(property_value)
|
189
|
-
@last_modified_property = property_value
|
189
|
+
@last_modified_property = property_value
|
190
190
|
end
|
191
191
|
|
192
192
|
# set the value of the LAST-MODIFIED property
|
193
193
|
def last_modified=(ruby_value)
|
194
|
-
self.last_modified_property= RiCal::PropertyValue::
|
194
|
+
self.last_modified_property= RiCal::PropertyValue::ZuluDateTime.convert(self, ruby_value)
|
195
195
|
end
|
196
196
|
|
197
197
|
# return the value of the LAST-MODIFIED property
|
198
|
-
# which will be an instance of
|
198
|
+
# which will be an instance of ZuluDateTime
|
199
199
|
def last_modified
|
200
200
|
last_modified_property ? last_modified_property.ruby_value : nil
|
201
201
|
end
|
202
202
|
|
203
203
|
def last_modified_property_from_string(line) # :nodoc:
|
204
|
-
@last_modified_property = RiCal::PropertyValue::
|
204
|
+
@last_modified_property = RiCal::PropertyValue::ZuluDateTime.new(self, line)
|
205
205
|
end
|
206
206
|
|
207
207
|
|
@@ -305,7 +305,7 @@ module RiCal
|
|
305
305
|
|
306
306
|
|
307
307
|
# return the the DTSTAMP property
|
308
|
-
# which will be an instances of RiCal::
|
308
|
+
# which will be an instances of RiCal::PropertyValueZuluDateTime
|
309
309
|
#
|
310
310
|
# [purpose (from RFC 2445)]
|
311
311
|
# This property indicates the date/time that the instance of the iCalendar object was created.
|
@@ -316,24 +316,24 @@ module RiCal
|
|
316
316
|
end
|
317
317
|
|
318
318
|
# set the DTSTAMP property
|
319
|
-
# property value should be an instance of RiCal::
|
319
|
+
# property value should be an instance of RiCal::PropertyValueZuluDateTime
|
320
320
|
def dtstamp_property=(property_value)
|
321
|
-
@dtstamp_property = property_value
|
321
|
+
@dtstamp_property = property_value
|
322
322
|
end
|
323
323
|
|
324
324
|
# set the value of the DTSTAMP property
|
325
325
|
def dtstamp=(ruby_value)
|
326
|
-
self.dtstamp_property= RiCal::PropertyValue::
|
326
|
+
self.dtstamp_property= RiCal::PropertyValue::ZuluDateTime.convert(self, ruby_value)
|
327
327
|
end
|
328
328
|
|
329
329
|
# return the value of the DTSTAMP property
|
330
|
-
# which will be an instance of
|
330
|
+
# which will be an instance of ZuluDateTime
|
331
331
|
def dtstamp
|
332
332
|
dtstamp_property ? dtstamp_property.ruby_value : nil
|
333
333
|
end
|
334
334
|
|
335
335
|
def dtstamp_property_from_string(line) # :nodoc:
|
336
|
-
@dtstamp_property = RiCal::PropertyValue::
|
336
|
+
@dtstamp_property = RiCal::PropertyValue::ZuluDateTime.new(self, line)
|
337
337
|
end
|
338
338
|
|
339
339
|
|
@@ -1390,72 +1390,72 @@ module RiCal
|
|
1390
1390
|
end
|
1391
1391
|
|
1392
1392
|
def export_properties_to(export_stream) #:nodoc:
|
1393
|
-
export_prop_to(export_stream, "
|
1393
|
+
export_prop_to(export_stream, "RDATE", @rdate_property)
|
1394
|
+
export_prop_to(export_stream, "CONTACT", @contact_property)
|
1394
1395
|
export_prop_to(export_stream, "EXDATE", @exdate_property)
|
1395
|
-
export_prop_to(export_stream, "TRANSP", @transp_property)
|
1396
|
-
export_prop_to(export_stream, "DTSTAMP", @dtstamp_property)
|
1397
1396
|
export_prop_to(export_stream, "CREATED", @created_property)
|
1398
|
-
export_prop_to(export_stream, "
|
1399
|
-
export_prop_to(export_stream, "CATEGORIES", @categories_property)
|
1397
|
+
export_prop_to(export_stream, "DURATION", @duration_property)
|
1400
1398
|
export_prop_to(export_stream, "DTEND", @dtend_property)
|
1401
1399
|
export_prop_to(export_stream, "STATUS", @status_property)
|
1402
|
-
export_prop_to(export_stream, "LAST-MODIFIED", @last_modified_property)
|
1403
1400
|
export_prop_to(export_stream, "DTSTART", @dtstart_property)
|
1404
1401
|
export_prop_to(export_stream, "RECURRENCE-ID", @recurrence_id_property)
|
1402
|
+
export_prop_to(export_stream, "TRANSP", @transp_property)
|
1403
|
+
export_prop_to(export_stream, "DTSTAMP", @dtstamp_property)
|
1405
1404
|
export_prop_to(export_stream, "RESOURCES", @resources_property)
|
1405
|
+
export_prop_to(export_stream, "CATEGORIES", @categories_property)
|
1406
|
+
export_prop_to(export_stream, "LAST-MODIFIED", @last_modified_property)
|
1407
|
+
export_prop_to(export_stream, "PRIORITY", @priority_property)
|
1408
|
+
export_prop_to(export_stream, "GEO", @geo_property)
|
1406
1409
|
export_prop_to(export_stream, "ATTENDEE", @attendee_property)
|
1407
|
-
export_prop_to(export_stream, "DURATION", @duration_property)
|
1408
1410
|
export_prop_to(export_stream, "UID", @uid_property)
|
1411
|
+
export_prop_to(export_stream, "DESCRIPTION", @description_property)
|
1409
1412
|
export_prop_to(export_stream, "URL", @url_property)
|
1410
|
-
export_prop_to(export_stream, "
|
1413
|
+
export_prop_to(export_stream, "SUMMARY", @summary_property)
|
1411
1414
|
export_prop_to(export_stream, "ORGANIZER", @organizer_property)
|
1412
1415
|
export_prop_to(export_stream, "RRULE", @rrule_property)
|
1413
|
-
export_prop_to(export_stream, "DESCRIPTION", @description_property)
|
1414
|
-
export_prop_to(export_stream, "CLASS", @class_property)
|
1415
|
-
export_prop_to(export_stream, "SUMMARY", @summary_property)
|
1416
|
-
export_prop_to(export_stream, "GEO", @geo_property)
|
1417
1416
|
export_prop_to(export_stream, "ATTACH", @attach_property)
|
1418
|
-
export_prop_to(export_stream, "
|
1417
|
+
export_prop_to(export_stream, "CLASS", @class_property)
|
1419
1418
|
export_prop_to(export_stream, "RELATED-TO", @related_to_property)
|
1419
|
+
export_prop_to(export_stream, "REQUEST-STATUS", @request_status_property)
|
1420
1420
|
export_prop_to(export_stream, "EXRULE", @exrule_property)
|
1421
|
-
export_prop_to(export_stream, "RDATE", @rdate_property)
|
1422
1421
|
export_prop_to(export_stream, "LOCATION", @location_property)
|
1423
1422
|
export_prop_to(export_stream, "COMMENT", @comment_property)
|
1423
|
+
export_prop_to(export_stream, "SEQUENCE", @sequence_property)
|
1424
1424
|
end
|
1425
1425
|
|
1426
1426
|
def ==(o) #:nodoc:
|
1427
1427
|
if o.class == self.class
|
1428
|
-
(
|
1428
|
+
(rdate_property == o.rdate_property) &&
|
1429
|
+
(contact_property == o.contact_property) &&
|
1429
1430
|
(exdate_property == o.exdate_property) &&
|
1430
|
-
(transp_property == o.transp_property) &&
|
1431
|
-
(dtstamp_property == o.dtstamp_property) &&
|
1432
1431
|
(created_property == o.created_property) &&
|
1433
|
-
(
|
1434
|
-
(categories_property == o.categories_property) &&
|
1432
|
+
(duration_property == o.duration_property) &&
|
1435
1433
|
(dtend_property == o.dtend_property) &&
|
1436
1434
|
(status_property == o.status_property) &&
|
1437
|
-
(last_modified_property == o.last_modified_property) &&
|
1438
1435
|
(dtstart_property == o.dtstart_property) &&
|
1439
1436
|
(recurrence_id_property == o.recurrence_id_property) &&
|
1437
|
+
(transp_property == o.transp_property) &&
|
1438
|
+
(dtstamp_property == o.dtstamp_property) &&
|
1440
1439
|
(resources_property == o.resources_property) &&
|
1440
|
+
(categories_property == o.categories_property) &&
|
1441
|
+
(last_modified_property == o.last_modified_property) &&
|
1442
|
+
(priority_property == o.priority_property) &&
|
1443
|
+
(geo_property == o.geo_property) &&
|
1441
1444
|
(attendee_property == o.attendee_property) &&
|
1442
|
-
(duration_property == o.duration_property) &&
|
1443
1445
|
(uid_property == o.uid_property) &&
|
1446
|
+
(description_property == o.description_property) &&
|
1444
1447
|
(url_property == o.url_property) &&
|
1445
|
-
(
|
1448
|
+
(summary_property == o.summary_property) &&
|
1446
1449
|
(organizer_property == o.organizer_property) &&
|
1447
1450
|
(rrule_property == o.rrule_property) &&
|
1448
|
-
(description_property == o.description_property) &&
|
1449
|
-
(class_property == o.class_property) &&
|
1450
|
-
(summary_property == o.summary_property) &&
|
1451
|
-
(geo_property == o.geo_property) &&
|
1452
1451
|
(attach_property == o.attach_property) &&
|
1453
|
-
(
|
1452
|
+
(class_property == o.class_property) &&
|
1454
1453
|
(related_to_property == o.related_to_property) &&
|
1454
|
+
(request_status_property == o.request_status_property) &&
|
1455
1455
|
(exrule_property == o.exrule_property) &&
|
1456
|
-
(rdate_property == o.rdate_property) &&
|
1457
1456
|
(location_property == o.location_property) &&
|
1458
|
-
(comment_property == o.comment_property)
|
1457
|
+
(comment_property == o.comment_property) &&
|
1458
|
+
(sequence_property == o.sequence_property)
|
1459
1459
|
else
|
1460
1460
|
super
|
1461
1461
|
end
|
@@ -1463,44 +1463,41 @@ module RiCal
|
|
1463
1463
|
|
1464
1464
|
def initialize_copy(o) #:nodoc:
|
1465
1465
|
super
|
1466
|
-
|
1466
|
+
rdate_property = rdate_property && rdate_property.dup
|
1467
|
+
contact_property = contact_property && contact_property.dup
|
1467
1468
|
exdate_property = exdate_property && exdate_property.dup
|
1468
|
-
transp_property = transp_property && transp_property.dup
|
1469
|
-
dtstamp_property = dtstamp_property && dtstamp_property.dup
|
1470
1469
|
created_property = created_property && created_property.dup
|
1471
|
-
|
1472
|
-
categories_property = categories_property && categories_property.dup
|
1470
|
+
duration_property = duration_property && duration_property.dup
|
1473
1471
|
dtend_property = dtend_property && dtend_property.dup
|
1474
1472
|
status_property = status_property && status_property.dup
|
1475
|
-
last_modified_property = last_modified_property && last_modified_property.dup
|
1476
1473
|
dtstart_property = dtstart_property && dtstart_property.dup
|
1477
1474
|
recurrence_id_property = recurrence_id_property && recurrence_id_property.dup
|
1475
|
+
transp_property = transp_property && transp_property.dup
|
1476
|
+
dtstamp_property = dtstamp_property && dtstamp_property.dup
|
1478
1477
|
resources_property = resources_property && resources_property.dup
|
1478
|
+
categories_property = categories_property && categories_property.dup
|
1479
|
+
last_modified_property = last_modified_property && last_modified_property.dup
|
1480
|
+
priority_property = priority_property && priority_property.dup
|
1481
|
+
geo_property = geo_property && geo_property.dup
|
1479
1482
|
attendee_property = attendee_property && attendee_property.dup
|
1480
|
-
duration_property = duration_property && duration_property.dup
|
1481
1483
|
uid_property = uid_property && uid_property.dup
|
1484
|
+
description_property = description_property && description_property.dup
|
1482
1485
|
url_property = url_property && url_property.dup
|
1483
|
-
|
1486
|
+
summary_property = summary_property && summary_property.dup
|
1484
1487
|
organizer_property = organizer_property && organizer_property.dup
|
1485
1488
|
rrule_property = rrule_property && rrule_property.dup
|
1486
|
-
description_property = description_property && description_property.dup
|
1487
|
-
class_property = class_property && class_property.dup
|
1488
|
-
summary_property = summary_property && summary_property.dup
|
1489
|
-
geo_property = geo_property && geo_property.dup
|
1490
1489
|
attach_property = attach_property && attach_property.dup
|
1491
|
-
|
1490
|
+
class_property = class_property && class_property.dup
|
1492
1491
|
related_to_property = related_to_property && related_to_property.dup
|
1492
|
+
request_status_property = request_status_property && request_status_property.dup
|
1493
1493
|
exrule_property = exrule_property && exrule_property.dup
|
1494
|
-
rdate_property = rdate_property && rdate_property.dup
|
1495
1494
|
location_property = location_property && location_property.dup
|
1496
1495
|
comment_property = comment_property && comment_property.dup
|
1496
|
+
sequence_property = sequence_property && sequence_property.dup
|
1497
1497
|
end
|
1498
1498
|
|
1499
1499
|
def add_date_times_to(required_timezones) #:nodoc:
|
1500
|
-
add_property_date_times_to(required_timezones, created_property)
|
1501
1500
|
add_property_date_times_to(required_timezones, dtstart_property)
|
1502
|
-
add_property_date_times_to(required_timezones, last_modified_property)
|
1503
|
-
add_property_date_times_to(required_timezones, dtstamp_property)
|
1504
1501
|
add_property_date_times_to(required_timezones, recurrence_id_property)
|
1505
1502
|
add_property_date_times_to(required_timezones, dtend_property)
|
1506
1503
|
add_property_date_times_to(required_timezones, exdate_property)
|
@@ -1509,7 +1506,7 @@ module RiCal
|
|
1509
1506
|
|
1510
1507
|
module ClassMethods #:nodoc:
|
1511
1508
|
def property_parser #:nodoc:
|
1512
|
-
{"
|
1509
|
+
{"RDATE"=>:rdate_property_from_string, "COMMENT"=>:comment_property_from_string, "TRANSP"=>:transp_property_from_string, "DTEND"=>:dtend_property_from_string, "LOCATION"=>:location_property_from_string, "CONTACT"=>:contact_property_from_string, "RECURRENCE-ID"=>:recurrence_id_property_from_string, "URL"=>:url_property_from_string, "LAST-MODIFIED"=>:last_modified_property_from_string, "CLASS"=>:class_property_from_string, "EXDATE"=>:exdate_property_from_string, "UID"=>:uid_property_from_string, "SEQUENCE"=>:sequence_property_from_string, "EXRULE"=>:exrule_property_from_string, "ATTENDEE"=>:attendee_property_from_string, "ORGANIZER"=>:organizer_property_from_string, "GEO"=>:geo_property_from_string, "RRULE"=>:rrule_property_from_string, "RESOURCES"=>:resources_property_from_string, "ATTACH"=>:attach_property_from_string, "CATEGORIES"=>:categories_property_from_string, "SUMMARY"=>:summary_property_from_string, "PRIORITY"=>:priority_property_from_string, "DESCRIPTION"=>:description_property_from_string, "RELATED-TO"=>:related_to_property_from_string, "REQUEST-STATUS"=>:request_status_property_from_string, "DURATION"=>:duration_property_from_string, "STATUS"=>:status_property_from_string, "DTSTART"=>:dtstart_property_from_string, "DTSTAMP"=>:dtstamp_property_from_string, "CREATED"=>:created_property_from_string}
|
1513
1510
|
end
|
1514
1511
|
end
|
1515
1512
|
|