Sha256: ee6856f23e051e0513d441a48a051870779c72f12b6e9b0d15c232998ef40d64

Contents?: true

Size: 1.6 KB

Versions: 2

Compression:

Stored size: 1.6 KB

Contents

# frozen_string_literal: true
module TopsConnect
  class Client
    include HTTParty
    include TopsConnect::Communities
    include TopsConnect::Owners
    include TopsConnect::Properties

    attr_reader :community_id, :community_api_key

    headers 'Content-Type' => 'application/json'
    headers 'api-version' => '1'

    base_uri 'https://topsconnectapi.azure-api.net'

    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
      @community_id = community_id
      @community_api_key = community_api_key
    end

    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)
      )

      case response.code
      when 200
        response.parsed_response
      when 400..499
        raise TopsConnect::BadRequest, response.parsed_response['Message']
      when 500..599
        raise TopsConnect::InternalError, response.parsed_response['Message']
      else
        raise TopsConnect::ApiError,
              "#{response.code}: #{response.parsed_response['Message']}"
      end
    end
  end

  class ApiError < ::RuntimeError
  end

  class BadRequest < ApiError
  end

  class InternalError < ApiError
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
tops_connect-0.4.1 lib/tops_connect/client.rb
tops_connect-0.4.0 lib/tops_connect/client.rb