Skip to content

Instantly share code, notes, and snippets.

@kianaditya
Created November 15, 2019 15:02
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kianaditya/f01f2964ea41997c19849a2193b82b3e to your computer and use it in GitHub Desktop.
Save kianaditya/f01f2964ea41997c19849a2193b82b3e to your computer and use it in GitHub Desktop.
require 'googleauth'
require 'google/apis'
require 'google/apis/calendar_v3'
module GoogleMeetService
def self.create_google_event(event)
authorize_client
google_event = create_calendar_event(event)
updated_google_event = update_calendar_event(event,google_event)
event.update_attribute(:conference_link,updated_google_event.hangout_link)
end
def self.create_calendar_event(event)
new_event_payload = Google::Apis::CalendarV3::Event.new(
summary: "Event_#{event.id}",
description: "Event_#{event.id} : #{event.description}",
start: { date_time: event.start_date.iso8601 },
end: { date_time: event.end_date.iso8601 }
)
new_event = @client.insert_event('primary',new_event_payload)
@client.get_event('primary',new_event.id)
end
def self.authorize_client
scopes = [
"https://www.googleapis.com/auth/calendar",
"https://www.googleapis.com/auth/calendar.events"
]
File.open('google_credentials.json', 'w') do |f|
f.puts Rails.application.credentials.GOOGLE_CREDENTIALS.to_json
end
authorizer = Google::Auth::ServiceAccountCredentials.make_creds(json_key_io: File.open('google_credentials.json'),scope: scopes)
File.delete('google_credentials.json') if File.exist?('google_credentials.json')
@client = Google::Apis::CalendarV3::CalendarService.new
@client.authorization = authorizer
@client.authorization.fetch_access_token!
end
def self.update_calendar_event(event,google_event)
random_meet_id = "#{('a'..'z').to_a.shuffle[0,3].join}-#{('a'..'z').to_a.shuffle[0,4].join}-#{('a'..'z').to_a.shuffle[0,3].join}"
update_event_payload = Google::Apis::CalendarV3::Event.new(
summary: "Event_#{event.id}",
description: "Event_#{event.id} : #{event.description}",
start: { date_time: event.start_date.iso8601 },
end: { date_time: event.end_date.iso8601 },
conference_data: {
conference_id: "#{random_meet_id}",
# conference_solution: {
# key:{
# type: "hangoutsMeet"
# },
# name: 'meet'
# },
create_request: {
request_id: "#{('a'..'z').to_a.shuffle[0,10].join}",
# conference_solution_key: {
# type: "hangoutsMeet"
# }
}
}
)
updated_event = @client.update_event('primary',google_event.id,update_event_payload,{conference_data_version: 1})
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment