41 lines
1.4 KiB
Plaintext
41 lines
1.4 KiB
Plaintext
:ruby
|
||
require 'icalendar/tzinfo'
|
||
|
||
# Create a calendar with an event (standard method)
|
||
cal = Icalendar::Calendar.new
|
||
tzid = @event.region.tzid
|
||
use_timezone = true
|
||
if cal.timezones.none? { |t| tzid == t.tzid }
|
||
# Only add this zone once
|
||
begin
|
||
tz = TZInfo::Timezone.get tzid
|
||
timezone = tz.ical_timezone @event.start_time
|
||
cal.add_timezone timezone
|
||
rescue TZInfo::InvalidTimezoneIdentifier
|
||
# No need to add this tz
|
||
use_timezone = false
|
||
end
|
||
end
|
||
|
||
cal.event do |e|
|
||
e.uid = "#{@event.id}@#{request.domain}"
|
||
if use_timezone
|
||
e.dtstamp = Icalendar::Values::DateTime.new @event.decision_time, tzid: tzid
|
||
e.dtstart = Icalendar::Values::DateTime.new @event.start_time, tzid: tzid
|
||
e.dtend = Icalendar::Values::DateTime.new @event.end_time, tzid: tzid
|
||
else
|
||
e.dtstamp = Icalendar::Values::DateTime.new @event.decision_time.localtime
|
||
e.dtstart = Icalendar::Values::DateTime.new @event.start_time.localtime
|
||
e.dtend = Icalendar::Values::DateTime.new @event.end_time.localtime
|
||
end
|
||
e.summary = @event.title
|
||
e.description = to_markdown @event.description.tr '\'', '’'
|
||
e.location = @event.full_address
|
||
e.organizer = "mailto:#{@event.contact}"
|
||
e.x_alt_desc = Icalendar::Values::Text.new @event.description, FMTTYPE: 'text/html'
|
||
end
|
||
|
||
cal.publish
|
||
|
||
= cal.to_ical
|