Sha256: 47d98725962ac2e2f8c39ec5ec93372c34d6d70ce5d987b21846609eaf1dcffe

Contents?: true

Size: 1.26 KB

Versions: 2

Compression:

Stored size: 1.26 KB

Contents

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

require_all "error/*"
require_all "api_connection/*"

module Espago
  class ApiConnection
    extend Forwardable
    def_delegator :@connection, :basic_auth, :authenticate

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

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

      handle_response response
    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.status, response.body)
      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

    def parse(body)
      JSON.parse body
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
espago-0.0.9 lib/espago/api_connection.rb
espago-0.0.7 lib/espago/api_connection.rb