class Synchrograph
Glues together the API Client, the GCalendar
and the ICalendar to create the right requests, in the right order and submit them
Public Class Methods
new(api_client)
click to toggle source
# File lib/synchrograph.rb, line 11 def initialize(api_client) @client = api_client end
Public Instance Methods
synchronise(gcalendar, icalendar)
click to toggle source
# File lib/synchrograph.rb, line 16 def synchronise(gcalendar, icalendar) ical_events = icalendar.first.events.find_all {|ie| ie.recurrence_id.nil?} gcal_events = gcalendar.events response_body = "" #Insert or update ical_events.each do |ie| ge = gcal_events.find {|ge| ge['id'] == ie.google_calendar_id} gcalendar.add_request_for_gcal_event_and_ical_event ge, ie end (gcal_events.find_all {|ge| ge['recurring_event_id'].nil? and not ical_events.map {|ie| ie.google_calendar_id}.include?(ge['id'])}).each do |ge| gcalendar.add_request_for_gcal_event_and_ical_event ge, nil end response_body << gcalendar.execute_requests.body #Now deal with recurrence exceptions ical_events = icalendar.first.events.find_all {|ie| not ie.recurrence_id.nil?} ical_events.group_by {|ie| ie.google_calendar_id}.each_pair do |ge_id, re_e| gcal_instances = gcalendar.instances_for_event_id ge_id re_e.each do |ie| instance = gcal_instances.find {|i| i.start.date_time == ie.recurrence_id} next if instance.nil? ie.update_from_parent_component! ie.google_calendar_id = instance.id gcalendar.add_request_for_gcal_event_and_ical_event(instance, ie) end end er = gcalendar.execute_requests response_body << er.body if er return response_body end