rubyredrick-ri_cal 0.0.2 → 0.0.3

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 (97) hide show
  1. data/History.txt +19 -2
  2. data/Manifest.txt +6 -3
  3. data/README.txt +130 -44
  4. data/Rakefile +1 -1
  5. data/copyrights.txt +1 -2
  6. data/lib/ri_cal/component/alarm.rb +1 -2
  7. data/lib/ri_cal/component/calendar.rb +25 -9
  8. data/lib/ri_cal/component/event.rb +1 -2
  9. data/lib/ri_cal/component/freebusy.rb +1 -2
  10. data/lib/ri_cal/component/journal.rb +1 -2
  11. data/lib/ri_cal/component/t_z_info_timezone.rb +1 -2
  12. data/lib/ri_cal/component/timezone/daylight_period.rb +1 -2
  13. data/lib/ri_cal/component/timezone/standard_period.rb +1 -2
  14. data/lib/ri_cal/component/timezone/timezone_period.rb +1 -2
  15. data/lib/ri_cal/component/timezone.rb +5 -2
  16. data/lib/ri_cal/component.rb +22 -7
  17. data/lib/ri_cal/core_extensions/date/conversions.rb +8 -7
  18. data/lib/ri_cal/core_extensions/date_time.rb +4 -2
  19. data/lib/ri_cal/core_extensions/object/conversions.rb +1 -1
  20. data/lib/ri_cal/core_extensions/string/conversions.rb +37 -6
  21. data/lib/ri_cal/core_extensions/time/conversions.rb +11 -7
  22. data/lib/ri_cal/core_extensions/time/tzid_access.rb +37 -0
  23. data/lib/ri_cal/core_extensions/time.rb +3 -1
  24. data/lib/ri_cal/floating_timezone.rb +32 -0
  25. data/lib/ri_cal/invalid_property_value.rb +8 -0
  26. data/lib/ri_cal/invalid_timezone_identifer.rb +2 -2
  27. data/lib/ri_cal/occurrence_enumerator.rb +5 -3
  28. data/lib/ri_cal/parser.rb +8 -8
  29. data/lib/ri_cal/properties/alarm.rb +8 -8
  30. data/lib/ri_cal/properties/event.rb +60 -60
  31. data/lib/ri_cal/properties/freebusy.rb +16 -16
  32. data/lib/ri_cal/properties/journal.rb +58 -58
  33. data/lib/ri_cal/properties/timezone_period.rb +23 -23
  34. data/lib/ri_cal/properties/todo.rb +63 -64
  35. data/lib/ri_cal/property_value/array.rb +10 -2
  36. data/lib/ri_cal/property_value/cal_address.rb +1 -2
  37. data/lib/ri_cal/property_value/date.rb +15 -3
  38. data/lib/ri_cal/property_value/date_time/additive_methods.rb +34 -33
  39. data/lib/ri_cal/property_value/date_time/time_machine.rb +175 -174
  40. data/lib/ri_cal/property_value/date_time/timezone_support.rb +70 -52
  41. data/lib/ri_cal/property_value/date_time.rb +47 -77
  42. data/lib/ri_cal/property_value/duration.rb +6 -3
  43. data/lib/ri_cal/property_value/geo.rb +1 -2
  44. data/lib/ri_cal/property_value/integer.rb +1 -2
  45. data/lib/ri_cal/property_value/occurrence_list.rb +79 -26
  46. data/lib/ri_cal/property_value/period.rb +23 -3
  47. data/lib/ri_cal/property_value/recurrence_rule/enumeration_support_methods.rb +1 -2
  48. data/lib/ri_cal/property_value/recurrence_rule/enumerator.rb +1 -2
  49. data/lib/ri_cal/property_value/recurrence_rule/initialization_methods.rb +1 -2
  50. data/lib/ri_cal/property_value/recurrence_rule/negative_setpos_enumerator.rb +1 -2
  51. data/lib/ri_cal/property_value/recurrence_rule/numbered_span.rb +1 -2
  52. data/lib/ri_cal/property_value/recurrence_rule/occurence_incrementer.rb +1 -2
  53. data/lib/ri_cal/property_value/recurrence_rule/recurring_day.rb +1 -2
  54. data/lib/ri_cal/property_value/recurrence_rule/recurring_month_day.rb +1 -2
  55. data/lib/ri_cal/property_value/recurrence_rule/recurring_numbered_week.rb +1 -2
  56. data/lib/ri_cal/property_value/recurrence_rule/recurring_year_day.rb +1 -2
  57. data/lib/ri_cal/property_value/recurrence_rule/validations.rb +1 -2
  58. data/lib/ri_cal/property_value/recurrence_rule.rb +3 -4
  59. data/lib/ri_cal/property_value/text.rb +1 -2
  60. data/lib/ri_cal/property_value/uri.rb +1 -2
  61. data/lib/ri_cal/property_value/utc_offset.rb +1 -2
  62. data/lib/ri_cal/property_value.rb +42 -11
  63. data/lib/ri_cal/required_timezones.rb +1 -2
  64. data/lib/ri_cal.rb +1 -2
  65. data/ri_cal.gemspec +6 -4
  66. data/spec/ri_cal/component/alarm_spec.rb +1 -2
  67. data/spec/ri_cal/component/calendar_spec.rb +1 -2
  68. data/spec/ri_cal/component/event_spec.rb +168 -13
  69. data/spec/ri_cal/component/freebusy_spec.rb +1 -2
  70. data/spec/ri_cal/component/journal_spec.rb +1 -2
  71. data/spec/ri_cal/component/t_z_info_timezone_spec.rb +1 -2
  72. data/spec/ri_cal/component/timezone_spec.rb +1 -2
  73. data/spec/ri_cal/component/todo_spec.rb +4 -5
  74. data/spec/ri_cal/component_spec.rb +30 -18
  75. data/spec/ri_cal/core_extensions/string/conversions_spec.rb +78 -0
  76. data/spec/ri_cal/core_extensions/time/calculations_spec.rb +1 -2
  77. data/spec/ri_cal/core_extensions/time/week_day_predicates_spec.rb +1 -2
  78. data/spec/ri_cal/occurrence_enumerator_spec.rb +23 -2
  79. data/spec/ri_cal/parser_spec.rb +6 -7
  80. data/spec/ri_cal/property_value/date_spec.rb +1 -2
  81. data/spec/ri_cal/property_value/date_time_spec.rb +54 -119
  82. data/spec/ri_cal/property_value/duration_spec.rb +12 -2
  83. data/spec/ri_cal/property_value/occurrence_list_spec.rb +67 -0
  84. data/spec/ri_cal/property_value/period_spec.rb +1 -2
  85. data/spec/ri_cal/property_value/recurrence_rule/recurring_year_day_spec.rb +1 -2
  86. data/spec/ri_cal/property_value/recurrence_rule_spec.rb +1 -2
  87. data/spec/ri_cal/property_value/text_spec.rb +1 -2
  88. data/spec/ri_cal/property_value/utc_offset_spec.rb +1 -2
  89. data/spec/ri_cal/property_value_spec.rb +19 -8
  90. data/spec/ri_cal/required_timezones_spec.rb +1 -2
  91. data/spec/ri_cal_spec.rb +1 -2
  92. data/spec/spec_helper.rb +2 -7
  93. data/tasks/ri_cal.rake +20 -13
  94. data/tasks/spec.rake +1 -1
  95. metadata +8 -5
  96. data/lib/ri_cal/core_extensions/date_time/conversions.rb +0 -27
  97. data/lib/ri_cal/time_with_floating_timezone.rb +0 -59
@@ -1,8 +1,7 @@
1
1
  require 'date'
2
2
  module RiCal
3
3
  class PropertyValue
4
- #- ©2009 Rick DeNatale
5
- #- All rights reserved. Refer to the file README.txt for the license
4
+ #- ©2009 Rick DeNatale, All rights reserved. Refer to the file README.txt for the license
6
5
  #
7
6
  # RiCal::PropertyValue::CalAddress represents an icalendar CalAddress property value
8
7
  # which is defined in RFC 2445 section 4.3.5 pp 35-37
@@ -28,13 +27,17 @@ module RiCal
28
27
  PropertyValue::Date.new(parent, line)
29
28
  end
30
29
  end
30
+
31
+ def self.valid_string?(string) #:nodoc:
32
+ string =~ /^\d{8}T\d{6}Z?$/
33
+ end
31
34
 
32
35
  def self.default_tzid # :nodoc:
33
36
  @default_tzid ||= "UTC"
34
37
  end
35
38
 
36
39
  def self.params_for_tzid(tzid) #:nodoc:
37
- if tzid == FloatingTimezone
40
+ if tzid == :floating
38
41
  {}
39
42
  else
40
43
  {'TZID' => tzid}
@@ -44,12 +47,12 @@ module RiCal
44
47
  # Set the default tzid to be used when instantiating an instance from a ruby object
45
48
  # see RiCal::PropertyValue::DateTime.from_time
46
49
  #
47
- # The parameter tzid is a string value to be used for the default tzid, a value of 'none' will cause
50
+ # The parameter tzid is a string value to be used for the default tzid, a value of :floating will cause
48
51
  # values with NO timezone to be produced, which will be interpreted by iCalendar as floating times
49
52
  # i.e. they are interpreted in the timezone of each client. Floating times are typically used
50
53
  # to represent events which are 'repeated' in the various time zones, like the first hour of the year.
51
54
  def self.default_tzid=(tzid)
52
- @default_tzid = value
55
+ @default_tzid = tzid
53
56
  end
54
57
 
55
58
  def self.default_tzid_hash # :nodoc:
@@ -59,7 +62,7 @@ module RiCal
59
62
  {'TZID' => default_tzid}
60
63
  end
61
64
  end
62
-
65
+
63
66
  def inspect # :nodoc:
64
67
  "#{@date_time_value}:#{tzid}"
65
68
  end
@@ -86,79 +89,40 @@ module RiCal
86
89
  when nil
87
90
  @date_time_value = nil
88
91
  when String
89
- self.tzid = 'UTC' if val =~/Z/
90
92
  @date_time_value = ::DateTime.parse(val)
93
+ if val =~/Z/
94
+ self.tzid = 'UTC'
95
+ else
96
+ @tzid ||= :floating
97
+ end
91
98
  when ::DateTime
92
99
  @date_time_value = val
93
100
  when ::Date, ::Time
94
101
  @date_time_value = ::DateTime.parse(val.to_s)
95
102
  end
96
103
  end
97
-
104
+
98
105
  # Extract the time and timezone identifier from an object used to set the value of a DATETIME property.
99
106
  #
100
- # If the object is an array it is expected to have a time or datetime as its first element, and a time zone
101
- # identifier string as the second element
107
+ # If the object is a string it should be of the form [TZID=identifier:]
102
108
  #
103
109
  # Otherwise determine if the object acts like an activesupport enhanced time, and extract its timezone
104
110
  # idenfifier if it has one.
105
111
  #
106
- def self.time_and_tzid(object)
107
- if ::Array === object
108
- object, identifier = object[0], object[1]
109
- else
110
- activesupport_time = object.acts_like_time? rescue nil
111
- time_zone = activesupport_time && object.time_zone rescue nil
112
- identifier = time_zone && (time_zone.respond_to?(:tzinfo) ? time_zone.tzinfo : time_zone).identifier
113
- end
114
- [object, identifier]
115
- end
116
-
117
- # A hack to detect whether an array passed to convert is a
118
- def self.single_time_or_date?(ruby_object)
119
- if (::Array === ruby_object)
120
- if (ruby_object.length == 2) && (::String === ruby_object[1])
121
- case ruby_object[0]
122
- when ::Date, ::DateTime, ::Time, PropertyValue::Date, PropertyValue::DateTime
123
- ruby_object
124
- else
125
- nil
126
- end
127
- end
112
+ def self.time_and_parameters(object)
113
+ parameters = {}
114
+ if ::String === object
115
+ object, parameters = self.time_and_parameters_from_string(object)
128
116
  else
129
- ruby_object
117
+ identifier = object.tzid rescue nil
118
+ parameters["TZID"] = identifier if identifier
130
119
  end
120
+ [object, parameters]
131
121
  end
132
122
 
133
123
 
134
124
  def self.convert(timezone_finder, ruby_object) # :nodoc:
135
- convert_with_tzid_or_nil(timezone_finder, ruby_object) || ruby_object.to_ri_cal_date_or_date_time_value.for_parent(timezone_finder)
136
- end
137
-
138
- # Create an instance of RiCal::PropertyValue::DateTime representing a Ruby Time or DateTime
139
- # If the ruby object has been extended by ActiveSupport to have a time_zone method, then
140
- # the timezone will be used as the TZID parameter.
141
- #
142
- # Otherwise the class level default tzid will be used.
143
- # == See
144
- # * RiCal::PropertyValue::DateTime.default_tzid
145
- # * RiCal::PropertyValue::DateTime#object_time_zone
146
- def self.from_time(time_or_date_time)
147
- convert_with_tzid_or_nil(nil, time_or_date_time) ||
148
- new(nil, :value => time_or_date_time.strftime("%Y%m%dT%H%M%S"), :params => default_tzid_hash)
149
- end
150
-
151
- def self.convert_with_tzid_or_nil(timezone_finder, ruby_object) # :nodoc:
152
- time, identifier = *self.time_and_tzid(ruby_object)
153
- if identifier
154
- new(
155
- timezone_finder,
156
- :params => params_for_tzid(identifier),
157
- :value => time.strftime("%Y%m%d%H%M%S")
158
- )
159
- else
160
- nil
161
- end
125
+ ruby_object.to_ri_cal_date_or_date_time_value(timezone_finder)
162
126
  end
163
127
 
164
128
  def self.from_string(string) # :nodoc:
@@ -192,10 +156,22 @@ module RiCal
192
156
 
193
157
  def params=(value) #:nodoc:
194
158
  @params = value.dup
195
- if params_timezone = params['TZID']
196
- @tzid = params_timezone
159
+ if params_timezone = @params['TZID']
160
+ self.tzid = @params['TZID']
197
161
  end
198
162
  end
163
+
164
+ # Return a Hash representing this properties parameters
165
+ def params
166
+ result = @params.dup
167
+ case tzid
168
+ when :floating, nil, "UTC"
169
+ result.delete('TZID')
170
+ else
171
+ result['TZID'] = tzid
172
+ end
173
+ result
174
+ end
199
175
 
200
176
  # Compare the receiver with another object which must respond to the to_datetime message
201
177
  # The comparison is done using the Ruby DateTime representations of the two objects
@@ -208,11 +184,11 @@ module RiCal
208
184
  [other.year, other.month] == [year, month]
209
185
  end
210
186
 
211
- def nth_wday_in_month(n, which_wday)
187
+ def nth_wday_in_month(n, which_wday) #:nodoc:
212
188
  @date_time_value.nth_wday_in_month(n, which_wday, self)
213
189
  end
214
190
 
215
- def nth_wday_in_year(n, which_wday)
191
+ def nth_wday_in_year(n, which_wday) #:nodoc:
216
192
  @date_time_value.nth_wday_in_year(n, which_wday, self)
217
193
  end
218
194
 
@@ -228,12 +204,6 @@ module RiCal
228
204
  @date_time_value.days_in_month
229
205
  end
230
206
 
231
- def in_same_month_as?(other)
232
- [other.year, other.month] == [year, month]
233
- end
234
-
235
-
236
-
237
207
  # Determine if the receiver and another object are equivalent RiCal::PropertyValue::DateTime instances
238
208
  def ==(other)
239
209
  if self.class === other
@@ -295,26 +265,26 @@ module RiCal
295
265
  @date_time_value.iso_year_and_week_one_start(wkst)
296
266
  end
297
267
 
298
- def iso_weeks_in_year(wkst)
299
- @date_time_value.iso_weeks_in_year(wkst)
268
+ def iso_weeks_in_year(wkst) #:nodoc:
269
+ @date_time_value.iso_weeks_in_year(wkst) #:nodoc:
300
270
  end
301
271
 
302
272
  # Return the "Natural' property value for the receover, in this case the receiver itself."
303
- def to_ri_cal_date_or_date_time_value
304
- self
273
+ def to_ri_cal_date_or_date_time_value(timezone_finder = nil) #:nodoc:
274
+ self.for_parent(timezone_finder)
305
275
  end
306
276
 
307
277
  # Return the Ruby DateTime representation of the receiver
308
- def to_datetime
278
+ def to_datetime #:nodoc:
309
279
  @date_time_value
310
280
  end
311
281
 
312
282
  # Returns a ruby DateTime object representing the receiver.
313
283
  def ruby_value
314
- to_datetime
284
+ ::DateTime.civil(year, month, day, hour, min, sec, rational_tz_offset).set_tzid(@tzid)
315
285
  end
316
286
 
317
- alias_method :to_ri_cal_ruby_value, :ruby_value
287
+ alias_method :to_ri_cal_ruby_value, :to_datetime
318
288
 
319
289
  def add_date_times_to(required_timezones) #:nodoc:
320
290
  required_timezones.add_datetime(self, tzid) if has_local_timezone?
@@ -1,7 +1,6 @@
1
1
  module RiCal
2
2
  class PropertyValue
3
- #- ©2009 Rick DeNatale
4
- #- All rights reserved. Refer to the file README.txt for the license
3
+ #- ©2009 Rick DeNatale, All rights reserved. Refer to the file README.txt for the license
5
4
  #
6
5
  # RiCal::PropertyValue::CalAddress represents an icalendar Duration property value
7
6
  # which is defined in
@@ -14,7 +13,7 @@ module RiCal
14
13
 
15
14
  def self.from_datetimes(parent, start, finish, sign='+') # :nodoc:
16
15
  if start > finish
17
- from_datetimes(finish, start, '-')
16
+ from_datetimes(self, finish, start, '-')
18
17
  else
19
18
  diff = finish - start
20
19
  days_diff = diff.to_i
@@ -60,6 +59,10 @@ module RiCal
60
59
  end
61
60
  end
62
61
  end
62
+
63
+ def self.valid_string?(string) #:nodoc:
64
+ string =~ /^[+-]?P((\d+)[DHMSW])+$/
65
+ end
63
66
 
64
67
  def days # :nodoc:
65
68
  @days * @sign
@@ -1,7 +1,6 @@
1
1
  module RiCal
2
2
  class PropertyValue
3
- #- ©2009 Rick DeNatale
4
- #- All rights reserved. Refer to the file README.txt for the license
3
+ #- ©2009 Rick DeNatale, All rights reserved. Refer to the file README.txt for the license
5
4
  #
6
5
  # RiCal::PropertyValue::CalAddress represents an icalendar Duration property value
7
6
  # which is defined in
@@ -1,7 +1,6 @@
1
1
  module RiCal
2
2
  class PropertyValue
3
- #- ©2009 Rick DeNatale
4
- #- All rights reserved. Refer to the file README.txt for the license
3
+ #- ©2009 Rick DeNatale, All rights reserved. Refer to the file README.txt for the license
5
4
  #
6
5
  class Integer < PropertyValue # :nodoc:
7
6
 
@@ -1,10 +1,11 @@
1
1
  module RiCal
2
2
  class PropertyValue
3
3
  # OccurrenceList is used to represent the value of an RDATE or EXDATE property.
4
- #- ©2009 Rick DeNatale
5
- #- All rights reserved. Refer to the file README.txt for the license
4
+ #- ©2009 Rick DeNatale, All rights reserved. Refer to the file README.txt for the license
6
5
  #
7
6
  class OccurrenceList < Array
7
+ attr_accessor :tzid #:nodoc:
8
+
8
9
  class Enumerator # :nodoc:
9
10
 
10
11
  attr_accessor :default_duration, :occurrence_list
@@ -26,35 +27,87 @@ module RiCal
26
27
  end
27
28
  end
28
29
  end
30
+
31
+ def initialize(timezone_finder, options={}) # :nodoc:
32
+ super
33
+ validate_elements
34
+ end
35
+
36
+ def self.convert(timezone_finder, *ruby_objects) # :nodoc:
37
+ # ruby_objects = [ruby_objects] unless Array === ruby_objects
38
+ source_elements = ruby_objects.inject([]) { |se, element|
39
+ if String === element
40
+ element.split(",").each {|str| se << str}
41
+ else
42
+ se << element
43
+ end
44
+ se
45
+ }
46
+ new(timezone_finder, :source_elements => source_elements )
47
+ end
48
+
49
+ def values_to_elements(values) # :nodoc:
50
+ values.map {|val| val.to_ri_cal_occurrence_list_value(self)}
51
+ end
29
52
 
53
+ def tzid_from_source_elements # :nodoc:
54
+ if @source_elements && String === (first_source = @source_elements.first)
55
+ probe = first_source.to_ri_cal_occurrence_list_value rescue nil
56
+ unless probe
57
+ return @source_elements.shift
58
+ end
59
+ end
60
+ nil
61
+ end
62
+
63
+ def tzid_conflict(element_tzid) # :nodoc:
64
+ element_tzid && tzid != element_tzid
65
+ end
30
66
 
31
- def self.convert(timezone_finder, ruby_object) # :nodoc:
32
- if PropertyValue::DateTime.single_time_or_date?(ruby_object)
33
- values = [ruby_object]
67
+ def validate_elements # :nodoc:
68
+ if @source_elements
69
+ self.tzid = tzid_from_source_elements
70
+ @elements = values_to_elements(@source_elements)
71
+ @value = @elements.map {|prop| prop.value}
34
72
  else
35
- values = ruby_object
73
+ @elements = values_to_elements(@value)
74
+ end
75
+ # if the tzid wasn't set by the parameters
76
+ self.tzid ||= @elements.map {|element| element.tzid}.find {|id| id}
77
+ @elements.each do |element|
78
+ raise InvalidPropertyValue.new("Mixed timezones are not allowed in an occurrence list") if tzid_conflict(element.tzid)
79
+ element.tzid = tzid
36
80
  end
37
- super(timezone_finder, values)
38
81
  end
39
82
 
40
- def value=(val) #:nodoc:
41
- super
42
- case params[:value]
43
- when 'DATE-TIME', nil
44
- @elements = @value.map {|val| PropertyValue::DateTime.convert(self, val)}.sort
45
- @value = @elements.map {|element| element.value}
46
- when 'DATE'
47
- @elements = @value.map {|val| PropertyValue::Date.new(self, val)}.sort
48
- @value = @elements.map {|element| element.value}
49
- when 'PERIOD'
83
+ def has_local_timezone? # :nodoc:
84
+ tzid && tzid != 'UTC'
85
+ end
86
+
87
+ def visible_params # :nodoc:
88
+ result = params.dup
89
+ if has_local_timezone?
90
+ result['TZID'] = tzid
91
+ else
92
+ result.delete('TZID')
50
93
  end
94
+ result
95
+ end
96
+
97
+ def value # :nodoc:
98
+ @elements.map {|element| element.value}.join(",")
99
+ end
100
+
101
+ # Return an array of the occurrences within the list
102
+ def ruby_value
103
+ @elements.map {|prop| prop.ruby_value}
51
104
  end
52
105
  end
53
-
54
- attr_writer :elements
55
- private :elements=
56
-
57
- def for_parent(parent)
106
+
107
+ attr_accessor :elements, :source_elements #:nodoc:
108
+ private :elements, :elements=, :source_elements=, :source_elements
109
+
110
+ def for_parent(parent) #:nodoc:
58
111
  if timezone_finder.nil?
59
112
  @timezone_finder = parent
60
113
  self
@@ -64,12 +117,12 @@ module RiCal
64
117
  OccurrenceList.new(parent, :value => value)
65
118
  end
66
119
  end
67
-
120
+
68
121
  # Return an enumerator which can produce the elements of the occurrence list
69
- def enumerator(component)
122
+ def enumerator(component) # :nodoc:
70
123
  OccurrenceList::Enumerator.new(@elements, component)
71
124
  end
72
-
125
+
73
126
  def add_date_times_to(required_timezones) #:nodoc:
74
127
  if @elements
75
128
  @elements.each do | occurrence |
@@ -77,6 +130,6 @@ module RiCal
77
130
  end
78
131
  end
79
132
  end
80
-
133
+
81
134
  end
82
135
  end
@@ -1,7 +1,6 @@
1
1
  module RiCal
2
2
  class PropertyValue
3
- #- ©2009 Rick DeNatale
4
- #- All rights reserved. Refer to the file README.txt for the license
3
+ #- ©2009 Rick DeNatale, All rights reserved. Refer to the file README.txt for the license
5
4
  #
6
5
  # RiCal::PropertyValue::CalAddress represents an icalendar Period property value
7
6
  # which is defined in
@@ -29,7 +28,28 @@ module RiCal
29
28
  end
30
29
  end
31
30
 
32
- def for_parent(parent)
31
+
32
+ def self.valid_string?(string) # :nodoc:
33
+ return false unless string.include?("/")
34
+ starter, terminator = *string.split("/")
35
+ return false unless PropertyValue::DateTime.valid_string?(starter)
36
+ if /P/ =~ terminator
37
+ return false unless PropertyValue::Duration.valid_string?(terminator)
38
+ else
39
+ return false unless PropertyValue::DateTime.valid_string?(terminator)
40
+ end
41
+ true
42
+ end
43
+
44
+ # Nop to allow occurrence list to try to set it
45
+ def tzid=(val)#:nodoc:
46
+ end
47
+
48
+ def tzid #:nodoc:
49
+ nil
50
+ end
51
+
52
+ def for_parent(parent) #:nodoc:
33
53
  if timezone_finder.nil
34
54
  @timezone_finder = parent
35
55
  self
@@ -1,8 +1,7 @@
1
1
  module RiCal
2
2
  class PropertyValue
3
3
  class RecurrenceRule < PropertyValue
4
- #- ©2009 Rick DeNatale
5
- #- All rights reserved. Refer to the file README.txt for the license
4
+ #- ©2009 Rick DeNatale, All rights reserved. Refer to the file README.txt for the license
6
5
  #
7
6
  module EnumerationSupportMethods # :nodoc:
8
7
 
@@ -1,8 +1,7 @@
1
1
  module RiCal
2
2
  class PropertyValue
3
3
  class RecurrenceRule < PropertyValue
4
- #- ©2009 Rick DeNatale
5
- #- All rights reserved. Refer to the file README.txt for the license
4
+ #- ©2009 Rick DeNatale, All rights reserved. Refer to the file README.txt for the license
6
5
  #
7
6
  class Enumerator # :nodoc:
8
7
  # base_time gets changed everytime the time is updated by the recurrence rule's frequency
@@ -1,8 +1,7 @@
1
1
  module RiCal
2
2
  class PropertyValue
3
3
  class RecurrenceRule < PropertyValue
4
- #- ©2009 Rick DeNatale
5
- #- All rights reserved. Refer to the file README.txt for the license
4
+ #- ©2009 Rick DeNatale, All rights reserved. Refer to the file README.txt for the license
6
5
  #
7
6
  module InitializationMethods # :nodoc:
8
7
 
@@ -1,8 +1,7 @@
1
1
  module RiCal
2
2
  class PropertyValue
3
3
  class RecurrenceRule < PropertyValue
4
- #- ©2009 Rick DeNatale
5
- #- All rights reserved. Refer to the file README.txt for the license
4
+ #- ©2009 Rick DeNatale, All rights reserved. Refer to the file README.txt for the license
6
5
  #
7
6
  class NegativeSetposEnumerator < Enumerator # :nodoc:
8
7
 
@@ -1,8 +1,7 @@
1
1
  module RiCal
2
2
  class PropertyValue
3
3
  class RecurrenceRule < PropertyValue
4
- #- ©2009 Rick DeNatale
5
- #- All rights reserved. Refer to the file README.txt for the license
4
+ #- ©2009 Rick DeNatale, All rights reserved. Refer to the file README.txt for the license
6
5
  #
7
6
  class NumberedSpan # :nodoc:
8
7
  attr_reader :source
@@ -35,8 +35,7 @@ module RiCal
35
35
  date_time.change(:month => 1, :day => 1)
36
36
  end
37
37
  end
38
- #- ©2009 Rick DeNatale
39
- #- All rights reserved. Refer to the file README.txt for the license
38
+ #- ©2009 Rick DeNatale, All rights reserved. Refer to the file README.txt for the license
40
39
  #
41
40
  class OccurrenceIncrementer # :nodoc:
42
41
 
@@ -1,8 +1,7 @@
1
1
  module RiCal
2
2
  class PropertyValue
3
3
  class RecurrenceRule < PropertyValue
4
- #- ©2009 Rick DeNatale
5
- #- All rights reserved. Refer to the file README.txt for the license
4
+ #- ©2009 Rick DeNatale, All rights reserved. Refer to the file README.txt for the license
6
5
  #
7
6
  # Instances of RecurringDay are used to represent values in BYDAY recurrence rule parts
8
7
  #
@@ -1,8 +1,7 @@
1
1
  module RiCal
2
2
  class PropertyValue
3
3
  class RecurrenceRule < PropertyValue
4
- #- ©2009 Rick DeNatale
5
- #- All rights reserved. Refer to the file README.txt for the license
4
+ #- ©2009 Rick DeNatale, All rights reserved. Refer to the file README.txt for the license
6
5
  #
7
6
  # Instances of RecurringMonthDay represent BYMONTHDAY parts in recurrence rules
8
7
  class RecurringMonthDay < NumberedSpan # :nodoc:
@@ -1,8 +1,7 @@
1
1
  module RiCal
2
2
  class PropertyValue
3
3
  class RecurrenceRule < PropertyValue
4
- #- ©2009 Rick DeNatale
5
- #- All rights reserved. Refer to the file README.txt for the license
4
+ #- ©2009 Rick DeNatale, All rights reserved. Refer to the file README.txt for the license
6
5
  #
7
6
  class RecurringNumberedWeek < NumberedSpan # :nodoc:
8
7
  def last
@@ -1,8 +1,7 @@
1
1
  module RiCal
2
2
  class PropertyValue
3
3
  class RecurrenceRule < PropertyValue
4
- #- ©2009 Rick DeNatale
5
- #- All rights reserved. Refer to the file README.txt for the license
4
+ #- ©2009 Rick DeNatale, All rights reserved. Refer to the file README.txt for the license
6
5
  #
7
6
  class RecurringYearDay < NumberedSpan # :nodoc:
8
7
 
@@ -1,8 +1,7 @@
1
1
  module RiCal
2
2
  class PropertyValue
3
3
  class RecurrenceRule < PropertyValue
4
- #- ©2009 Rick DeNatale
5
- #- All rights reserved. Refer to the file README.txt for the license
4
+ #- ©2009 Rick DeNatale, All rights reserved. Refer to the file README.txt for the license
6
5
  #
7
6
  module Validations #:nodoc:
8
7
  # Validate that the parameters of the reciever conform to RFC 2445
@@ -4,8 +4,7 @@ end
4
4
 
5
5
  module RiCal
6
6
  class PropertyValue
7
- #- ©2009 Rick DeNatale
8
- #- All rights reserved. Refer to the file README.txt for the license
7
+ #- ©2009 Rick DeNatale, All rights reserved. Refer to the file README.txt for the license
9
8
  #
10
9
  # RiCal::PropertyValue::RecurrenceRule represents an icalendar Recurrence Rule property value
11
10
  # which is defined in
@@ -99,7 +98,7 @@ module RiCal
99
98
  #
100
99
  def until=(until_value)
101
100
  reset_errors
102
- @until = until_value && until_value.to_ri_cal_date_or_date_time_value
101
+ @until = until_value && until_value.to_ri_cal_date_or_date_time_value(timezone_finder)
103
102
  @count = nil unless @count.nil? || @by_list_hash
104
103
  end
105
104
 
@@ -119,7 +118,7 @@ module RiCal
119
118
  @interval = interval_value
120
119
  end
121
120
 
122
- def value
121
+ def value #:nodoc:
123
122
  @value || to_ical
124
123
  end
125
124
 
@@ -1,7 +1,6 @@
1
1
  module RiCal
2
2
  class PropertyValue
3
- #- ©2009 Rick DeNatale
4
- #- All rights reserved. Refer to the file README.txt for the license
3
+ #- ©2009 Rick DeNatale, All rights reserved. Refer to the file README.txt for the license
5
4
  #
6
5
  # RiCal::PropertyValue::Text represents an icalendar Text property value
7
6
  # which is defined in
@@ -1,7 +1,6 @@
1
1
  module RiCal
2
2
  class PropertyValue
3
- #- ©2009 Rick DeNatale
4
- #- All rights reserved. Refer to the file README.txt for the license
3
+ #- ©2009 Rick DeNatale, All rights reserved. Refer to the file README.txt for the license
5
4
  #
6
5
  # RiCal::PropertyValue::Uri represents an icalendar Uri property value
7
6
  # which is defined in
@@ -1,7 +1,6 @@
1
1
  module RiCal
2
2
  class PropertyValue
3
- #- ©2009 Rick DeNatale
4
- #- All rights reserved. Refer to the file README.txt for the license
3
+ #- ©2009 Rick DeNatale, All rights reserved. Refer to the file README.txt for the license
5
4
  #
6
5
  class UtcOffset < PropertyValue # :nodoc:
7
6
  attr_accessor :sign, :hours, :minutes, :seconds