Module: RiCal::OccurrenceEnumerator
- Includes:
- Enumerable
- Defined in:
- lib/ri_cal/occurrence_enumerator.rb
Overview
-
©2009 Rick DeNatale
-
All rights reserved. Refer to the file README.txt for the license
OccurrenceEnumerator provides common methods for CalendarComponents that support recurrence i.e. Event, Journal, Todo, and TimezonePeriod
Defined Under Namespace
Classes: EmptyRulesEnumerator, EnumerationInstance, OccurrenceMerger
Instance Method Summary collapse
-
#bounded? ⇒ Boolean
A predicate which determines whether the component has a bounded set of occurrences.
-
#default_duration ⇒ Object
:nodoc:.
-
#default_start_time ⇒ Object
:nodoc:.
-
#each(&block) ⇒ Object
execute the block for each occurrence.
-
#occurrences(options = {}) ⇒ Object
return an array of occurrences according to the options parameter.
-
#recurrence(occurrence) ⇒ Object
:nodoc:.
-
#set_occurrence_properties!(occurrence) ⇒ Object
:nodoc:.
Instance Method Details
#bounded? ⇒ Boolean
A predicate which determines whether the component has a bounded set of occurrences
146 147 148 |
# File 'lib/ri_cal/occurrence_enumerator.rb', line 146 def bounded? EnumerationInstance.new(self).bounded? end |
#default_duration ⇒ Object
:nodoc:
11 12 13 |
# File 'lib/ri_cal/occurrence_enumerator.rb', line 11 def default_duration # :nodoc: dtend && dtstart.to_ri_cal_date_time_value.duration_until(dtend.to_ri_cal_date_time_value) end |
#default_start_time ⇒ Object
:nodoc:
15 16 17 |
# File 'lib/ri_cal/occurrence_enumerator.rb', line 15 def default_start_time # :nodoc: dtstart && dtstart.to_ri_cal_date_time_value end |
#each(&block) ⇒ Object
execute the block for each occurrence
141 142 143 |
# File 'lib/ri_cal/occurrence_enumerator.rb', line 141 def each(&block) # :yields: Component EnumerationInstance.new(self).each(&block) end |
#occurrences(options = {}) ⇒ Object
return an array of occurrences according to the options parameter. If a component is not bounded, and the number of occurrences to be returned is not constrained by either the :before, or :count options an ArgumentError will be raised.
The components returned will be the same type as the receiver, but will have any recurrence properties (rrule, rdate, exrule, exdate) removed since they are single occurrences, and will have the recurrence-id property set to the occurrences dtstart value. (see RFC 2445 sec 4.8.4.4 pp 107-109)
parameter options:
- :starting
-
a Date, Time, or DateTime, no occurrences starting before this argument will be returned
- :before
-
a Date, Time, or DateTime, no occurrences starting on or after this argument will be returned.
- :count
-
an integer which limits the number of occurrences returned.
136 137 138 |
# File 'lib/ri_cal/occurrence_enumerator.rb', line 136 def occurrences(={}) EnumerationInstance.new(self, ).to_a end |
#recurrence(occurrence) ⇒ Object
:nodoc:
170 171 172 |
# File 'lib/ri_cal/occurrence_enumerator.rb', line 170 def recurrence(occurrence) # :nodoc: result = self.dup.set_occurrence_properties!(occurrence) end |
#set_occurrence_properties!(occurrence) ⇒ Object
:nodoc:
150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 |
# File 'lib/ri_cal/occurrence_enumerator.rb', line 150 def set_occurrence_properties!(occurrence) # :nodoc: occurrence_end = occurrence[:end] occurrence_start = occurrence[:start] @rrule_property = nil @exrule_property = nil @rdate_property = nil @exdate_property = nil @recurrence_id_property = occurrence_start @dtstart_property = occurrence_start if occurrence_end @dtend_property = occurrence_end else if dtend my_duration = @dtend_property - @dtstart_property @dtend_property = occurrence_start + my_duration end end self end |