12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- require 'googleauth'
- require 'google/apis/calendar_v3'
- class GoogleCalendar
- def initialize(config, logger)
- @config = config
- if @config['google']['key'].present?
- # https://github.com/google/google-auth-library-ruby/issues/65
- # https://github.com/google/google-api-ruby-client/issues/370
- ENV['GOOGLE_PRIVATE_KEY'] = @config['google']['key']
- ENV['GOOGLE_CLIENT_EMAIL'] = @config['google']['service_account_email']
- ENV['GOOGLE_ACCOUNT_TYPE'] = 'service_account'
- elsif @config['google']['key_file'].present?
- ENV['GOOGLE_APPLICATION_CREDENTIALS'] = @config['google']['key_file']
- end
- @logger ||= logger
- # https://github.com/google/google-api-ruby-client/blob/master/MIGRATING.md
- @calendar = Google::Apis::CalendarV3::CalendarService.new
- # https://developers.google.com/api-client-library/ruby/auth/service-accounts
- # https://developers.google.com/identity/protocols/application-default-credentials
- scopes = [Google::Apis::CalendarV3::AUTH_CALENDAR]
- @authorization = Google::Auth.get_application_default(scopes)
- @logger.info("Setup")
- @logger.debug @calendar.inspect
- end
- def self.open(*args, &block)
- instance = new(*args)
- block.call(instance)
- ensure
- instance&.cleanup!
- end
- def auth_as
- @authorization.fetch_access_token!
- @calendar.authorization = @authorization
- end
- # who - String: email of user to add event
- # details - JSON String: see https://developers.google.com/google-apps/calendar/v3/reference/events/insert
- def publish_as(who, details)
- auth_as
- @logger.info("Attempting to create event for " + who)
- @logger.debug details.to_yaml
- event = Google::Apis::CalendarV3::Event.new(**details.deep_symbolize_keys)
- ret = @calendar.insert_event(
- who,
- event,
- send_notifications: true
- )
- @logger.debug ret.to_yaml
- ret.to_h
- end
- def events_as(who, date)
- auth_as
- date ||= Date.today
- @logger.info("Attempting to receive events for "+who)
- @logger.debug details.to_yaml
- ret = @calendar.list_events(
- who
- )
- @logger.debug ret.to_yaml
- ret.to_h
- end
- def cleanup!
- ENV.delete('GOOGLE_PRIVATE_KEY')
- ENV.delete('GOOGLE_CLIENT_EMAIL')
- ENV.delete('GOOGLE_ACCOUNT_TYPE')
- ENV.delete('GOOGLE_APPLICATION_CREDENTIALS')
- end
- end
|