espago/espago

View on GitHub
lib/espago/api_connection.rb

Summary

Maintainability
A
0 mins
Test Coverage
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