class TopsConnect::Client

Attributes

community_api_key[R]
community_id[R]

Public Class Methods

new(community_id, community_api_key) click to toggle source
# File lib/tops_connect/client.rb, line 20
def initialize(community_id, community_api_key)
  authorization = Base64.strict_encode64 [
    TopsConnect.configuration.client_id,
    TopsConnect.configuration.software_key
  ].join(':')

  self.class.headers('authorization' => "Basic #{authorization}")

  @subscription_key = TopsConnect.configuration.subscription_key

  switch_community(community_id, community_api_key)
end

Public Instance Methods

get(endpoint, headers: {}, query: {}) click to toggle source
# File lib/tops_connect/client.rb, line 38
def get(endpoint, headers: {}, query: {})
  response = self.class.get(
    "/#{TopsConnect.configuration.zone}/api#{endpoint}",
    query: query.merge('subscription-key' => @subscription_key),
    headers: headers.merge('community-api-key' => @community_api_key)
  )

  raise_exception(response) unless response.code == 200

  response.parsed_response
end
post(endpoint, body: {}, headers: {}, query: {}) click to toggle source
# File lib/tops_connect/client.rb, line 63
def post(endpoint, body: {}, headers: {}, query: {})
  response = self.class.post(
    "/#{TopsConnect.configuration.zone}/api#{endpoint}",
    query: query.merge('subscription-key' => @subscription_key),
    headers: headers.merge('community-api-key' => @community_api_key),
    body: body.to_json
  )

  raise_exception(response) unless response.code == 200

  response.parsed_response
end
put(endpoint, body: {}, headers: {}, query: {}) click to toggle source
# File lib/tops_connect/client.rb, line 50
def put(endpoint, body: {}, headers: {}, query: {})
  response = self.class.put(
    "/#{TopsConnect.configuration.zone}/api#{endpoint}",
    query: query.merge('subscription-key' => @subscription_key),
    headers: headers.merge('community-api-key' => @community_api_key),
    body: body.to_json
  )

  raise_exception(response) unless response.code == 200

  response.parsed_response
end
switch_community(community_id, community_api_key) click to toggle source
# File lib/tops_connect/client.rb, line 33
def switch_community(community_id, community_api_key)
  @community_id = community_id
  @community_api_key = community_api_key
end

Protected Instance Methods

raise_exception(response) click to toggle source
# File lib/tops_connect/client.rb, line 78
def raise_exception(response)
  case response.code
  when 404 then raise TopsConnect::NotFoundError, response
  when 400..499 then raise TopsConnect::ClientError, response
  when 500..599
    message = TopsConnect::ApiError.error_message(response.parsed_response)

    # These errors can largely be ignored - it's not our fault
    raise TopsConnect::TimeoutError, response if message['Timeout expired']

    raise TopsConnect::InternalError, response
  else
    # As far as I'm aware, Tops does not return 100 - 199 or 205 - 399.
    raise TopsConnect::ApiError, response
  end
end