class DearInventory::Request

Constants

ERROR_MESSAGE_PREFIXES
MAX_RETRIES
RETRY_DELAY

Public Class Methods

call(parameters, num_previous_records: 0) click to toggle source
# File lib/dear_inventory/lib/request.rb, line 14
def self.call(parameters, num_previous_records: 0)
  new(parameters, num_previous_records: num_previous_records).call
end
new(parameters, num_previous_records: 0) click to toggle source
# File lib/dear_inventory/lib/request.rb, line 24
def initialize(parameters, num_previous_records: 0)
  @parameters = T.let(parameters, DearInventory::Models::Request)
  @num_previous_records = T.let(num_previous_records, Integer)
  @retries = T.let(0, Integer)
end

Public Instance Methods

call() click to toggle source
# File lib/dear_inventory/lib/request.rb, line 31
def call
  options = request_params(@parameters.action, @parameters.params)
  response = HTTP.headers(headers).
    public_send(@parameters.action, @parameters.uri, options)

  DearInventory::Response.new(
    response: response,
    request: @parameters,
    num_previous_records: @num_previous_records
  )
rescue DearInventory::APILimitError, HTTP::ConnectionError => e
  retry_request(e)
end

Private Instance Methods

headers() click to toggle source
# File lib/dear_inventory/lib/request.rb, line 48
def headers
  {
    "Content-Type": "application/json",
    "api-auth-accountid": DearInventory.config.require(:account_id),
    "api-auth-applicationkey": DearInventory.config.require(:key),
  }
end
request_params(action, params) click to toggle source
# File lib/dear_inventory/lib/request.rb, line 60
def request_params(action, params)
  if action == :get
    { params: params.to_h }
  else
    { json: params.to_h }
  end
end
retry_request(error) click to toggle source
# File lib/dear_inventory/lib/request.rb, line 79
def retry_request(error)
  @retries += 1
  raise if @retries >= MAX_RETRIES

  message_prefix = ERROR_MESSAGE_PREFIXES[error.class]
  retry_time = @retries * RETRY_DELAY

  DearInventory.config.logger.warn(
    "#{message_prefix} while fetching #{@parameters.uri}. " \
    "The request will be tried again in #{retry_time} seconds"
  )

  sleep(retry_time)
  call
end