class Qapi::Connection

Attributes

site[RW]
token_url[RW]

Public Class Methods

new(key, secret, integration) click to toggle source

TODO: Make this generic and don’t use an Integration object OR we could create a value object inside Qapi @param [Integration] integration model

# File lib/qapi/connection.rb, line 13
def initialize(key, secret, integration)
  @integration = integration
  client = OAuth2::Client.new(key, secret, site: self.class.site, token_url: self.class.token_url)
  @access_token = OAuth2::AccessToken.new(client, integration.token, {
    refresh_token: integration.refresh_token,
    expires_at: integration.expires_at,
    mode: :query
  })
end

Public Instance Methods

get(path, query = nil) click to toggle source
# File lib/qapi/connection.rb, line 23
def get(path, query = nil)
  refresh_if_required!
  @access_token.get(path, params: query).tap do |response|
    # TODO: Handle the case where the token expires
    raise Qapi::Error.new(response.body) unless response.status == 200
  end
end

Protected Instance Methods

refresh_if_required!() click to toggle source
# File lib/qapi/connection.rb, line 32
def refresh_if_required!
  if @access_token.expired?
    @access_token = @access_token.refresh!
    @integration.update!(
      token:         @access_token.token,
      refresh_token: @access_token.refresh_token,
      expires_at:    @access_token.expires_at
    )
  end
end