class MyApiClient::Request::Executor

Executes HTTP request with specified parameters.

Attributes

agent[R]
instance[R]
request_logger[R]
request_params[R]

Public Class Methods

new(instance:, request_params:, request_logger:, faraday_options:) click to toggle source

@param instance [MyApiClient::Base]

The my_api_client instance.
The instance method will be called on error handling.

@param request_params [MyApiClient::Params::Request]

Request parameter instance.

@param request_logger [MyApiClient::Logger]

Request logger instance.

@param faraday_options [Hash]

Options for the faraday instance. Mainly used for timeout settings.

@return [Sawyer::Response]

Response instance.

@raise [MyApiClient::Error]

Raises on invalid response or network errors.
# File lib/my_api_client/request/executor.rb, line 20
def initialize(instance:, request_params:, request_logger:, faraday_options:)
  @instance = instance
  @request_params = request_params
  @request_logger = request_logger
  faraday = Faraday.new(nil, faraday_options)
  @agent = Sawyer::Agent.new('', faraday: faraday)
end

Private Instance Methods

api_request() click to toggle source

Executes HTTP request to the API.

@return [Sawyer::Response]

Response instance.

@raise [MyApiClient::NetworkError]

Raises on any network errors.
# File lib/my_api_client/request/executor.rb, line 51
def api_request
  agent.call(*request_params.to_sawyer_args)
rescue *NETWORK_ERRORS => e
  params = Params::Params.new(request_params, nil)
  raise MyApiClient::NetworkError.new(params, e)
end
call() click to toggle source
# File lib/my_api_client/request/executor.rb, line 32
def call
  request_logger.info('Start')
  response = api_request
  request_logger.info("Duration #{response.timing.in_milliseconds} msec")
  verify(response)
rescue MyApiClient::Error => e
  request_logger.warn("Failure (#{e.message})")
  raise
else
  request_logger.info("Success (#{response.status})")
  response
end
find_error_handler(response_params) click to toggle source

Executes response verifyment. If an invalid response is detected, return the error handler procedure. The error handlers defined later takes precedence.

@param response_params [Sawyer::Response]

The target response.

@return [nil]

Returns nil when a valid response.

@return [Proc]

Returns Proc when a invalid response.
# File lib/my_api_client/request/executor.rb, line 80
def find_error_handler(response_params)
  instance.error_handlers.reverse_each do |error_handler|
    result = error_handler.call(instance, response_params)
    return result unless result.nil?
  end
  nil
end
verify(response_params) click to toggle source

Verifies the response.

@param response_params [Sawyer::Response]

The target response.

@return [nil]

Returns nil when a valid response.

@raise [MyApiClient::Error]

Raises on any invalid response.
# File lib/my_api_client/request/executor.rb, line 66
def verify(response_params)
  params = Params::Params.new(request_params, response_params)
  find_error_handler(response_params)&.call(params, request_logger)
end