class Unleashed::Client
Public Class Methods
new(options = {})
click to toggle source
# File lib/unleashed/client.rb, line 35 def initialize(options = {}) # Use options passed in, but fall back to module defaults Unleashed::Configurable.keys.each do |key| instance_variable_set( :"@#{key}", options[key] || Unleashed.instance_variable_get(:"@#{key}") ) end end
resources()
click to toggle source
Available resources for {Client}
@return [Hash]
# File lib/unleashed/client.rb, line 141 def self.resources { customers: CustomerResource, invoices: InvoiceResource, currencies: CurrencyResource, payment_terms: PaymentTermResource, companies: CompanyResource } end
Public Instance Methods
connection()
click to toggle source
Create a new Faraday connection
@return [Faraday::Connection]
# File lib/unleashed/client.rb, line 47 def connection Faraday.new(url: @api_endpoint, request: { params_encoder: CustomParamsEncoder }) do |faraday| faraday.adapter :net_http end end
get(url, parameters = {}, headers = {}, skip_status_check = false)
click to toggle source
Make a HTTP GET request
@param url [String] The path, relative to {api_endpoint} @param parameters [Hash] Query params for request @return [Faraday::Response]
# File lib/unleashed/client.rb, line 83 def get(url, parameters = {}, headers = {}, skip_status_check = false) response = connection.get do |request| request.url "#{api_endpoint}#{url}" request.params = parameters.sort.to_h # Set headers request = init_default_headers(request) # Assign more custom headers headers.each do |key, value| request.headers[key] = value end # Print log time = Time.zone.now.strftime('%Y-%m-%d %H:%M:%S %z') puts "[#{time}] Client -- : HEADERS #{request.headers}" puts "[#{time}] Client -- : GET #{request.path}" puts "[#{time}] Client -- : PARAMS #{request.params}" end on_complete(response) unless skip_status_check response end
hmac_input(params_hash)
click to toggle source
# File lib/unleashed/client.rb, line 53 def hmac_input(params_hash) hmac_input_a = [] params_hash.each do |k, v| hmac_input_a << "#{k}=#{v}" end hmac_input_a.join('&') end
init_default_headers(request)
click to toggle source
# File lib/unleashed/client.rb, line 69 def init_default_headers(request) request.headers['client-type'] = @client_type_header request.headers['Accept'] = 'application/json' request.headers['Content-Type'] = 'application/json' request.headers['api-auth-id'] = @api_id request.headers['api-auth-signature'] = signature(hmac_input(request.params)) request end
method_missing(name, *args, &block)
click to toggle source
Catch calls for resources
Calls superclass method
# File lib/unleashed/client.rb, line 153 def method_missing(name, *args, &block) if self.class.resources.keys.include?(name) resources[name] ||= self.class.resources[name].new(self) resources[name] else super end end
post(url, parameters = {}, headers = {}, skip_status_check = false)
click to toggle source
Make a HTTP POST request
@param url [String] The path, relative to {#api_endpoint} @param parameters [Hash] Query params for request @return [Faraday::Response]
# File lib/unleashed/client.rb, line 112 def post(url, parameters = {}, headers = {}, skip_status_check = false) response = connection.post do |request| request.url "#{api_endpoint}#{url}" # Set headers init_default_headers(request) # Assign more custom headers headers.each do |key, value| request.headers[key] = value end request.body = parameters.to_json # Print log time = Time.zone.now.strftime('%Y-%m-%d %H:%M:%S %z') puts "[#{time}] Client -- : HEADERS #{request.headers}" puts "[#{time}] Client -- : POST #{request.path}" puts "[#{time}] Client -- : PARAMS #{request.params}" puts "[#{time}] Client -- : BODY #{request.body}" end on_complete(response) unless skip_status_check response end
resources()
click to toggle source
Resources being currently used
@return [Hash]
# File lib/unleashed/client.rb, line 165 def resources @resources ||= {} end
signature(params = '')
click to toggle source
Create a signature for request
# File lib/unleashed/client.rb, line 64 def signature(params = '') hash = OpenSSL::HMAC.digest('sha256', @api_key, params) Base64.strict_encode64(hash) end
Private Instance Methods
on_complete(response)
click to toggle source
# File lib/unleashed/client.rb, line 171 def on_complete(response) fail Unleashed::Error.from_response(response, @errors_format) unless response.success? end