Module: Icalendar::Timezone::TzProperties
Class Method Summary collapse
Instance Method Summary collapse
Class Method Details
.included(base) ⇒ Object
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
# File 'lib/icalendar/timezone.rb', line 7 def self.included(base) base.class_eval do required_property :dtstart, Icalendar::Values::DateTime required_property :tzoffsetfrom, Icalendar::Values::UtcOffset required_property :tzoffsetto, Icalendar::Values::UtcOffset optional_property :rrule, Icalendar::Values::Recur, true optional_property :comment optional_property :rdate, Icalendar::Values::DateTime optional_property :tzname transient_variable :@cached_occurrences transient_variable :@occurrences end end |
Instance Method Details
#occurrences ⇒ Object
23 24 25 26 27 28 29 30 31 32 |
# File 'lib/icalendar/timezone.rb', line 23 def occurrences @occurrences ||= IceCube::Schedule.new(dtstart.to_time) do |s| rrule.each do |rule| s.add_recurrence_rule IceCube::Rule.from_ical(rule.value_ical) end rdate.each do |date| s.add_recurrence_time date.to_time end end.all_occurrences_enumerator end |
#previous_occurrence(from) ⇒ Object
34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
# File 'lib/icalendar/timezone.rb', line 34 def previous_occurrence(from) from = IceCube::TimeUtil.match_zone(from, dtstart.to_time) @cached_occurrences ||= [] while @cached_occurrences.empty? || @cached_occurrences.last <= from begin @cached_occurrences << occurrences.next rescue StopIteration break end end @cached_occurrences.reverse_each.find { |occurrence| occurrence < from } end |