class SmartcatSDK::REST::BaseRequest

Public Class Methods

new(*args) click to toggle source
# File lib/smartcat_sdk/rest/base_request.rb, line 4
def initialize(*args)
  options     = args.last.is_a?(Hash) ? args.pop : {}
  @config     = SmartcatSDK::Util::ClientConfig.new options
  @user       = args[0] || nil
  @password   = args[1] || nil
  raise ArgumentError, 'Account ID is required' unless @user
  raise ArgumentError, 'API key is required' unless @password
  set_up_connection
end

Protected Instance Methods

prepare_request(method, path, params: {}, headers: {}) click to toggle source

Prepare http request :reek: TooManyStatements { enabled: false }

# File lib/smartcat_sdk/rest/base_request.rb, line 19
def prepare_request(method, path, params: {}, headers: {})
  request_path = @config.host
  request_path += "/api/integration/v1/#{path}"
  uri = URI.parse(request_path)
  uri.query = URI.encode_www_form(params) if %w[get delete].include?(method.to_s)
  request = SmartcatSDK::Util::Request.prepare(headers, method, params, uri)
  request.basic_auth(@user, @password)
  connect_and_send(request)
end

Private Instance Methods

connect_and_send(request, type: :json) click to toggle source

Send an HTTP request using the cached @http object and return the JSON response body parsed into a hash. Also save the raw Net::HTTP::Request and Net::HTTP::Response objects as @last_request and @last_response to allow for inspection later. :reek: TooManyStatements { enabled: false }

# File lib/smartcat_sdk/rest/base_request.rb, line 66
def connect_and_send(request, type: :json)
  @last_request = request
  retries_left = @config.retry_limit
  begin
    response = @http.request request
    @last_response = response
    raise SmartcatSDK::REST::ServerError if response.is_a?(Net::HTTPServerError)
  rescue StandardError => _error
    raise if request.class == Net::HTTP::Post
    raise if retries_left <= 0
    retries_left -= 1
    retry
  end
  Builder.handle(type, response)
end
set_up_connection() click to toggle source

Set up and cache a Net::HTTP object to use when making requests. rubocop:disable Metrics/AbcSize rubocop:disable Metrics/MethodLength :reek: TooManyStatements { enabled: false }

# File lib/smartcat_sdk/rest/base_request.rb, line 36
def set_up_connection
  uri = URI.parse(@config.host)
  @http = Net::HTTP.new(
    uri.host,
    uri.port,
    @config.proxy_addr,
    @config.proxy_port,
    @config.proxy_user,
    @config.proxy_pass
  )
  @http.verify_mode = OpenSSL::SSL::VERIFY_NONE
  @http.use_ssl = @config.use_ssl
  if @config.ssl_verify_peer
    @http.verify_mode = OpenSSL::SSL::VERIFY_PEER
    @http.ca_file = @config.ssl_ca_file
  else
    @http.verify_mode = OpenSSL::SSL::VERIFY_NONE
  end
  @http.open_timeout = @config.timeout
  @http.read_timeout = @config.timeout
end