class LabClient::Client

API Specifics

Variables / Meta

Attributes

delay[RW]

include HTTParty

http[RW]

include HTTParty

klass[RW]

include HTTParty

path[RW]

include HTTParty

resp[RW]

include HTTParty

retries[RW]

include HTTParty

settings[RW]

include HTTParty

Public Class Methods

new(user_settings = nil) click to toggle source

Default setup, pull in settings

# File lib/labclient/client.rb, line 10
def initialize(user_settings = nil)
  @settings = user_settings
  setup_profile if user_settings&.key?(:profile) || ENV['LABCLIENT_PROFILE']
  @settings ||= fill_configuration

  # Set Unspecified Defaults
  unspecified_defaults

  prompt_for_url if @settings[:url].blank?

  # Only prompt if explicitly set to nil
  prompt_for_token if @settings[:token].nil?

  # Initial Delay / Retry Value
  self.delay = 0
  self.retries = 0

  # Request Configuration
  self.http = HTTP.new(@settings)
end

Public Instance Methods

inspect() click to toggle source
# File lib/labclient/client/meta.rb, line 8
def inspect
  "#<LabClient::Client url: \"#{@settings[:url]}\">"
end
post_request_handlers() click to toggle source

Handling Details for after the request Debug,Retry, Instance Variables, Error Handling

# File lib/labclient/client.rb, line 63
def post_request_handlers
  # Handle Retry Logic
  raise LabClient::Retry if should_retry?

  # Save Client
  save_client

  # Reset Delay/Retry Factor
  retry_update if resp.success?

  # Exit on Max Retries
  raise LabClient::Error.new(resp), resp.friendly_error if retry_max?

  raise LabClient::Error.new(resp), resp.friendly_error unless resp.success?

  # Drop in raw path
  save_path
end
process(resp) click to toggle source

Assume we want LabStruct if @klass is ever nil

# File lib/labclient/client.rb, line 83
def process(resp)
  case resp.data
  when LabStruct
    klass ? klass.new(resp.data, resp, self) : resp.data
  when Array
    if @klass.nil?
      resp.data
    else
      PaginatedResponse.new(@klass, resp, self)
    end
  else
    resp.data
  end
end
request(method, path, klass = nil, body = {}, dump_json = true) click to toggle source

rubocop:disable Metrics/AbcSize, Metrics/MethodLength

# File lib/labclient/client.rb, line 32
def request(method, path, klass = nil, body = {}, dump_json = true)
  self.klass = klass
  self.resp = http.request(method, path, body, dump_json)
  self.path = path

  debug_handler if debug?

  post_request_handlers

  process resp
rescue LabClient::Error => e
  logger.fatal('Request Failed', e.error_details) unless quiet?
  resp
rescue LabClient::Retry
  self.retries += 1

  # Assume Retry After by Default
  logger.debug('Retry After', value: retry_after, retry_header: retry_header) if debug?
  self.delay = retry_after if resp.headers.key? 'retry-after'

  self.delay += delay_factor
  logger.warn "Received #{resp.code}. Retry in #{delay}", limit: retry_max, retries: retries unless quiet?

  sleep delay unless ENV['LABCLIENT_TESTING']

  retry
end
subclasses() click to toggle source

Helper to make subclasses directly accessible

# File lib/labclient/client/meta.rb, line 13
def subclasses
  self.class.instance_variable_get(:@subclasses)
end