class LightspeedRestaurantClient::Request

Constants

STAGING_URL

Attributes

base_uri[R]
body[R]
connection[R]
headers[R]
logger[R]
path[R]
query[R]
token[R]

Public Class Methods

new(base_uri, path, token, body = {}, query = {}, logger = nil) click to toggle source
# File lib/lightspeed_restaurant/request.rb, line 17
def initialize(base_uri, path, token, body = {}, query = {}, logger = nil)
  @base_uri   = base_uri || STAGING_URL
  @headers    = { 'Content-Type' => 'application/json', 'X-Auth-Token' => token }
  @body       = body.to_json
  @query      = query
  @path       = '/PosServer' + path
  @connection = Excon.new(@base_uri)
  @logger = logger || begin
    require 'logger'
    ::Logger.new($stdout)
  end
end

Public Instance Methods

perform(**args) click to toggle source
# File lib/lightspeed_restaurant/request.rb, line 30
def perform(**args)
  log_request(args[:method])
  response = connection.request(args.merge(path: path, headers: headers, body: body, query: query))
  if [200, 201].include?(response.status)
    response.body
  else
    handle_error(response)
  end
end

Private Instance Methods

authentication_error(response) click to toggle source
# File lib/lightspeed_restaurant/request.rb, line 84
def authentication_error(response)
  AuthenticationError.new(JSON.parse(response.body)['description'],
    response.status, response.body, response.headers)
end
handle_error(response) click to toggle source
# File lib/lightspeed_restaurant/request.rb, line 48
def handle_error(response)
  logger.error('response') { "Error : #{response.status} #{response.body}" }
  case response.status
  when 400
    raise invalid_request_error(response)
  when 401
    raise authentication_error(response)
  when 403
    raise unauthorized_error(response)
  when 404
    raise not_found_error(response)
  when 429
    raise rate_limit_error(response)
  else
    raise response_object_error(response)
  end
end
invalid_request_error(response) click to toggle source
# File lib/lightspeed_restaurant/request.rb, line 79
def invalid_request_error(response)
  InvalidRequestError.new(JSON.parse(response.body)['description'],
    response.status, response.body, response.headers)
end
log_request(http_method) click to toggle source
# File lib/lightspeed_restaurant/request.rb, line 42
def log_request(http_method)
  logger.info('request') do
    "#{http_method} #{base_uri}#{path} : #{query} - #{body}"
  end
end
not_found_error(response) click to toggle source
# File lib/lightspeed_restaurant/request.rb, line 70
def not_found_error(response)
  NotFoundError.new('Resource not found', response.status, response.body, response.headers)
end
rate_limit_error(response) click to toggle source
# File lib/lightspeed_restaurant/request.rb, line 89
def rate_limit_error(response)
  RateLimitError.new(JSON.parse(response.body)['description'],
    response.status, response.body, response.headers)
end
response_object_error(response) click to toggle source
# File lib/lightspeed_restaurant/request.rb, line 74
def response_object_error(response)
  APIError.new("Invalid response object from API: #{JSON.parse(response.body)['description']}",
    response.status, response.body, response.headers)
end
unauthorized_error(response) click to toggle source
# File lib/lightspeed_restaurant/request.rb, line 66
def unauthorized_error(response)
  UnauthorizedError.new('Unauthorized resource', response.status, response.body, response.headers)
end