class MoreHoliday::Importers::ICal

Attributes

content[R]
serialized[R]
year[R]

Public Class Methods

new(content, year: Date.today.year) click to toggle source
# File lib/more_holiday/importers/i_cal.rb, line 8
def initialize content, year: Date.today.year
  @content = content
  @year = year
end

Public Instance Methods

serialize() click to toggle source
# File lib/more_holiday/importers/i_cal.rb, line 13
def serialize
  extract_events
  remove_out_of_scope_events
  @serialized.sort!
end

Private Instance Methods

add_event(date, summary) click to toggle source
# File lib/more_holiday/importers/i_cal.rb, line 33
def add_event date, summary
  @serialized = Array.new unless @serialized.is_a?(Array)
  @serialized << [date.to_s, summary.to_s]
end
complete_frequent(event) click to toggle source
# File lib/more_holiday/importers/i_cal.rb, line 38
def complete_frequent event
  rules = event.rrule.first

  case rules.frequency
  when "YEARLY"
    event_year, month, day = event.dtstart.year, event.dtstart.month, event.dtstart.day

    if rules.interval.is_a?(Integer)
      while event_year <= year or event_year <= event.dtstamp.year
        add_event(Date.parse("#{event_year}-#{month}-#{day}"), event.summary)
        event_year += rules.interval
      end
    end
  end
end
extract_events() click to toggle source
# File lib/more_holiday/importers/i_cal.rb, line 21
def extract_events
  Icalendar::Calendar.parse(content).map do |calendar|
    calendar.events.map do |event|
      if !event.rrule.first.nil?
        complete_frequent(event)
      else
        add_event(event.dtstart, event.summary)
      end
    end
  end
end
remove_out_of_scope_events() click to toggle source
# File lib/more_holiday/importers/i_cal.rb, line 54
def remove_out_of_scope_events
  @serialized.reject! { |event| Date.parse(event.first).year != year  }
end