Module: Flycal::EventMapper

Defined in:
lib/flycal/event_mapper.rb

Overview

Normalizes Google Calendar API event objects into plain hashes.

Class Method Summary collapse

Class Method Details

.extract_end(event, start_time) ⇒ Object



46
47
48
49
50
51
52
53
54
55
56
# File 'lib/flycal/event_mapper.rb', line 46

def extract_end(event, start_time)
  if event.end&.date_time
    event.end.date_time
  elsif event.end&.date
    Date.parse(event.end.date.to_s)
  else
    start_time + 3600
  end
rescue ArgumentError
  start_time + 3600
end

.extract_start(event) ⇒ Object



34
35
36
37
38
39
40
41
42
43
44
# File 'lib/flycal/event_mapper.rb', line 34

def extract_start(event)
  if event.start&.date_time
    event.start.date_time
  elsif event.start&.date
    Date.parse(event.start.date.to_s)
  else
    Time.now
  end
rescue ArgumentError
  Time.now
end

.to_h(event) ⇒ Object



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/flycal/event_mapper.rb', line 10

def to_h(event)
  start_time = extract_start(event)
  end_time = extract_end(event, start_time)

  {
    id: event.id || SecureRandom.uuid,
    summary: event.summary || "(No title)",
    description: event.description,
    location: event.location,
    start_time: start_time,
    end_time: end_time,
    all_day: !event.start&.date.nil? && event.start&.date_time.nil?,
    status: event.status || "confirmed",
    html_link: event.html_link,
    creator: event.creator&.email,
    organizer: event.organizer&.email,
    attendees: Array(event.attendees).map do |attendee|
      { email: attendee.email, response_status: attendee.response_status }
    end
  }
rescue StandardError
  nil
end