class TheCaptain::CaptainClient
Constants
- REQUEST_METHODS
Attributes
conn[RW]
response[R]
Public Class Methods
active_client()
click to toggle source
# File lib/the_captain/captain_client.rb, line 10 def self.active_client Thread.current[:captain_client] || default_client end
default_client()
click to toggle source
# File lib/the_captain/captain_client.rb, line 14 def self.default_client Thread.current[:captain_default_client] ||= CaptainClient.new(default_conn) end
default_conn()
click to toggle source
# File lib/the_captain/captain_client.rb, line 18 def self.default_conn Thread.current[:captain_default_conn] ||= begin HTTP.headers("X-API-KEY" => TheCaptain.api_key) .accept("application/json") .timeout( read: TheCaptain.read_timeout, write: TheCaptain.write_timeout, connect: TheCaptain.connect_timeout, ) end end
new(conn = nil)
click to toggle source
# File lib/the_captain/captain_client.rb, line 30 def initialize(conn = nil) @conn = conn || self.class.default_conn @captain_url = TheCaptain.api_url end
Public Instance Methods
decode_response()
click to toggle source
# File lib/the_captain/captain_client.rb, line 43 def decode_response raise Error::ClientError.missing_response_object unless @response Response::CaptainVessel.new(@response) end
request(verb_method, path, params = {})
click to toggle source
# File lib/the_captain/captain_client.rb, line 35 def request(verb_method, path, params = {}) verify_api_key_header! verify_request_method!(verb_method) capture_response! { send(verb_method.to_sym, destination_url(path), params) } raise_status_error! unless @response.status.success? self end
Protected Instance Methods
capture_response!(retry_count = TheCaptain.retry_attempts) { || ... }
click to toggle source
# File lib/the_captain/captain_client.rb, line 50 def capture_response!(retry_count = TheCaptain.retry_attempts) @response = yield rescue StandardError retry_count ||= 0 (retry_count -= 1).positive? ? retry : raise end
get(url, params = {})
click to toggle source
# File lib/the_captain/captain_client.rb, line 57 def get(url, params = {}) @conn.get(url, params: params) end
post(url, params = {})
click to toggle source
# File lib/the_captain/captain_client.rb, line 61 def post(url, params = {}) @conn.post(url, json: params) end
Private Instance Methods
destination_url(path)
click to toggle source
# File lib/the_captain/captain_client.rb, line 90 def destination_url(path) path = path.start_with?("/") || path.empty? ? path : "/#{path}" "#{@captain_url}#{path}" end
raise_status_error!()
click to toggle source
# File lib/the_captain/captain_client.rb, line 67 def raise_status_error! return unless TheCaptain.raise_http_errors? case @response.status.code when 401 raise Error::APIAuthorizationError.new("Authorization Error", @response) when 500..502 raise Error::APIConnectionError.new("Problem with server response", @response) else false end end
verify_api_key_header!()
click to toggle source
# File lib/the_captain/captain_client.rb, line 80 def verify_api_key_header! api_key = @conn.default_options.headers["X-API-KEY"] return unless api_key.nil? || api_key.empty? raise Error::ClientAuthenticationError.no_key_provided end
verify_request_method!(verb_method)
click to toggle source
# File lib/the_captain/captain_client.rb, line 86 def verify_request_method!(verb_method) raise Error::ClientInvalidRequestError unless REQUEST_METHODS.include?(verb_method.to_sym) end