Skip to content

Instantly share code, notes, and snippets.

@kianaditya
Created November 15, 2019 15:02

Revisions

  1. kianaditya created this gist Nov 15, 2019.
    64 changes: 64 additions & 0 deletions google_meet_service.rb
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,64 @@
    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