Sha256: 1fb2f00e125d3a49d555f580fcdfa9f179216e880b9d3d24b38e5b220536d1e4

Contents?: true

Size: 1.49 KB

Versions: 3

Compression:

Stored size: 1.49 KB

Contents

require 'faraday'
require 'oj'

module Bouncie
  class Client
    API_ENDPOINT = 'https://api.bouncie.dev/v1'.freeze

    attr_reader :options

    def initialize(options)
      @options = options
    end

    def trips(imei:, transaction_id: nil, gps_format: 'polyline', starts_after: nil, ends_before: nil)
      request(
        http_method: :get,
        endpoint:    'trips',
        params: {
          imei:           imei,
          transaction_id: transaction_id,
          gps_format:     gps_format,
          starts_after:   starts_after,
          ends_before:    ends_before
        }.compact
      ).map { |data| Bouncie::Trip.new(data) }
    end

    def vehicles(imei: nil, vin: nil)
      request(
        http_method: :get,
        endpoint: 'vehicles',
        params: {
          imei: imei,
          vin:  vin
        }.compact
      ).map { |data| Bouncie::Vehicle.new(data) }
    end

    private

    def headers
      @_headers ||= {
        'AuthorizationCode' => options[:authorization_code],
        'ApiKey'            => options[:api_key],
      }.merge(options[:headers] || {})
    end

    def client
      @_client ||= Faraday.new(API_ENDPOINT, headers: headers) do |client|
        client.request :url_encoded
        client.adapter Faraday.default_adapter
      end
    end

    def request(http_method:, endpoint:, params: {})
      params.transform_keys! { |k| k.to_s.dasherize }
      resp = client.public_send(http_method, endpoint, params)
      Oj.load(resp.body)
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
bouncie-0.3.0 lib/bouncie/client.rb
bouncie-0.2.0 lib/bouncie/client.rb
bouncie-0.1.0 lib/bouncie/client.rb