loomio/loomio

View on GitHub
app/models/calendar_invite.rb

Summary

Maintainability
A
0 mins
Test Coverage
class CalendarInvite
  include PrettyUrlHelper
  include FormattedDateHelper

  def initialize(outcome = Outcome.new)
    @calendar = build_calendar(outcome)
  end

  def to_ical
    @calendar&.to_ical
  end

  private

  def build_calendar(outcome)
    Icalendar::Calendar.new.tap do |calendar|
      calendar.event do |event|
        if outcome.poll_option.name.match /^\d+-\d+-\d+$/
          event.duration = "+P0W1D0H0M"
          event.dtstart  = outcome.poll_option.name.to_date
        else
          event.duration = "+P0W0D0H#{outcome.poll.meeting_duration}M"
          event.dtstart  = Icalendar::Values::DateTime.new(parse_datetime(outcome.poll_option.name), tzid: 'UTC')
        end
        event.organizer   = Icalendar::Values::CalAddress.new(outcome.author.email, cn: outcome.author.name)
        event.summary     = outcome.event_summary
        event.description = outcome.event_description
        event.location    = outcome.event_location
        event.attendee    = outcome.attendee_emails
        event.ip_class    = "PRIVATE"
        event.url         = poll_url(outcome.poll)
      end
    end
  end
end