class PayrollHero::Api::Client

Attributes

client[R]

Public Class Methods

new(token, base_url) click to toggle source
# File lib/payroll_hero/api/client.rb, line 11
def initialize(token, base_url)
  headers = {
    'User-Agent' => user_agent_string,
  }
  params = {
    token: token,
  }
  @client = Faraday.new(url: base_url) do |faraday|
    faraday.request :url_encoded
    faraday.response :logger if PayrollHero::Api.debug

    faraday.use FaradayMiddleware::Mashify
    faraday.response :json, content_type: /\bjson$/

    faraday.headers.merge! headers
    faraday.params.merge! params

    faraday.adapter Faraday.default_adapter
  end
end

Public Instance Methods

delete(path, params = {}) click to toggle source
# File lib/payroll_hero/api/client.rb, line 44
def delete(path, params = {})
  do_request(:delete, path, params)
end
get(path, params = {}) click to toggle source
# File lib/payroll_hero/api/client.rb, line 32
def get(path, params = {})
  do_request(:get, path, params)
end
head(path, params = {}) click to toggle source
# File lib/payroll_hero/api/client.rb, line 48
def head(path, params = {})
  do_request(:head, path, params)
end
options(path, params = {}) click to toggle source
# File lib/payroll_hero/api/client.rb, line 56
def options(path, params = {})
  do_request(:options, path, params)
end
patch(path, params = {}) click to toggle source
# File lib/payroll_hero/api/client.rb, line 52
def patch(path, params = {})
  do_request(:patch, path, params)
end
post(path, params = {}) click to toggle source
# File lib/payroll_hero/api/client.rb, line 36
def post(path, params = {})
  do_request(:post, path, params)
end
put(path, params = {}) click to toggle source
# File lib/payroll_hero/api/client.rb, line 40
def put(path, params = {})
  do_request(:put, path, params)
end

Private Instance Methods

do_request(method, path, params) click to toggle source
# File lib/payroll_hero/api/client.rb, line 62
def do_request(method, path, params)
  response = wrap_request { client.public_send(method, path, params) }
  validate_response(response)
  response.body
end
error_from(response) click to toggle source
# File lib/payroll_hero/api/client.rb, line 68
def error_from(response)
  klass = {
    400 => Errors::BadRequest,
    401 => Errors::Unauthorized,

    403 => Errors::Forbidden,
    404 => Errors::NotFound,
    405 => Errors::MethodNotAllowed,
    406 => Errors::NotAcceptable,

    422 => Errors::UnprocessableEntity,

    500 => Errors::InternalServerError,
  }[response.status] || Errors::ServerReturnedError

  case response.body
  when Hash
    if response.body['error'] && response.body['error_description']
      raise klass.new(response.body['error'], response.body['error_description'])
    else
      raise klass.new('unknown', response.body.inspect)
    end
  else
    raise klass.new("unknown: #{response.status}", response.body)
  end
end
user_agent_string() click to toggle source
# File lib/payroll_hero/api/client.rb, line 108
def user_agent_string
  if PayrollHero::Api.application_name != :none
    "#{PayrollHero::Api.application_name} (PayrollHero::Api #{PayrollHero::Api::VERSION})"
  else
    "(PayrollHero::Api #{PayrollHero::Api::VERSION})"
  end
end
validate_response(response) click to toggle source
# File lib/payroll_hero/api/client.rb, line 95
def validate_response(response)
  case response.status
  when 400..499, 500..599
    raise error_from(response)
  when 200..299
    # All success status codes, some are important, but should have already been handled by
    # the underlying protocol
    return
  else
    raise UnexpectedResponse, "Unexpected response status: #{response.status}"
  end
end
wrap_request() { || ... } click to toggle source
# File lib/payroll_hero/api/client.rb, line 116
def wrap_request
  with_retries(max_tries: 3) { yield }
end