Sha256: 10acdda3da6487b603943b2be0d19e14781a0b662cd5c3b2144210a2c369c49d

Contents?: true

Size: 1.6 KB

Versions: 3

Compression:

Stored size: 1.6 KB

Contents

require "faraday"
require "json"
require "forwardable"
require "espago/router"
require "espago/error"
require "espago/response"
require "facets/kernel/require_all"

require "espago/api_connection/api"
require "espago/api_connection/api_delete"
require "espago/api_connection/api_get"
require "espago/api_connection/api_post"
require "espago/api_connection/api_put"

begin
  require_all "error/*"
  require_all "api_connection/*"
rescue LoadError #if "require_all" method isn't from kernel gem
  require_rel "error/*"
  require_rel "api_connection/*"
end

module Espago
  class ApiConnection

    def initialize(enviroment,headers)
      @connection = Faraday.new(enviroment)
      @connection.headers = headers
      @router = Router
    end

    def create(path, method, params = {} )
      route = @router.new(path, method).route
      response = route.new(@connection).request(params)

      handle_response response
    end

    def authenticate(username, password)
      @connection.request(:authorization, :basic, username, password)
    end

    private

    def handle_response(response)
      case response.status
      when 200, 201, 204
        return Response.new(response)
      when 400, 404, 422
        raise invalid_request_error(response)
      when 401
        raise authentication_error(response)
      else
        raise api_error(response)
      end
    end

    def invalid_request_error(response)
      InvalidRequestError.new(response)
    end

    def authentication_error(response)
      AuthenticationError.new(response)
    end

    def api_error(response)
      ApiError.new(response)
    end

  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
espago-0.1.11 lib/espago/api_connection.rb
espago-0.1.10 lib/espago/api_connection.rb
espago-0.1.9 lib/espago/api_connection.rb