class LabClient::Client
API Specifics
Variables / Meta
Attributes
delay[RW]
include HTTParty
http[RW]
include HTTParty
klass[RW]
include HTTParty
link[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