Sha256: 61c02d0d61681caec3b3305b73eb13857ba200b728fcf5da7cd5d2f2c97239f1

Contents?: true

Size: 1.51 KB

Versions: 1

Compression:

Stored size: 1.51 KB

Contents

module Freefeed
  class Client
    HOST = 'freefeed.net'.freeze

    attr_accessor :api_token, :faraday_options, :resources

    def initialize(api_token = nil, faraday_options = {})
      @api_token = api_token
      @faraday_options = faraday_options
    end

    def authenticate(username:, password:)
      Session.create(self, username: username, password: password).tap do |re|
        @api_token = re.fetch('authToken')
      end
    end

    def call!(verb, endpoint, params = {}, headers = {})
      response = conn.send(
        verb, endpoint, params, auth_header.merge(headers)
      )
      handle_erros(response)
      prepare_response(response)
    end

    private

    def conn
      @conn ||= Faraday.new(url: "https://#{HOST}") do |faraday|
        faraday.request :multipart
        faraday.response(
          :logger,
          (faraday_options[:logger] || Logger.new(STDOUT)),
          (faraday_options[:logger_options] || { bodies: true, headers: true })
        )
        faraday.request :json
        faraday.adapter faraday_options[:adapter] || Faraday.default_adapter
      end
    end

    def handle_erros(response)
      raise(
        Exceptions::ResponseError.new(response),
        'Freefeed API has returned the error'
      ) unless response.status == 200
    end

    def prepare_response(response)
      MultiJson.load(response.body.to_s)
    rescue MultiJson::LoadError
      response.body
    end

    def auth_header
      api_token.nil? ? {} : { 'x-authentication-token': api_token }
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
freefeed-client-1.1.0 lib/freefeed/client.rb