module Icalendar::Timezone::TzProperties

Public Class Methods

included(base) click to toggle source
# File lib/icalendar/timezone.rb, line 9
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

Public Instance Methods

occurrences() click to toggle source
# File lib/icalendar/timezone.rb, line 25
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) click to toggle source
# File lib/icalendar/timezone.rb, line 36
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