class CurrencyCloud::RequestHandler

Attributes

session[R]

Public Class Methods

new(session = CurrencyCloud.session) click to toggle source
# File lib/currency_cloud/request_handler.rb, line 5
def initialize(session = CurrencyCloud.session)
  @session = session
end

Public Instance Methods

get(route, params = {}, opts = {}) click to toggle source
# File lib/currency_cloud/request_handler.rb, line 9
def get(route, params = {}, opts = {})
  retry_authenticate('get', route, params, opts) do |url, new_params, options|
    options[:query] = new_params
    HTTParty.get(url, options)
  end
end
post(route, params = {}, opts = {}) click to toggle source
# File lib/currency_cloud/request_handler.rb, line 16
def post(route, params = {}, opts = {})
  retry_authenticate('post', route, params, opts) do |url, new_params, options|
    options[:body] = new_params
    HTTParty.post(url, options)
  end
end

Private Instance Methods

build_url(route) click to toggle source
# File lib/currency_cloud/request_handler.rb, line 69
def build_url(route)
  "#{session.environment_url}/#{CurrencyCloud::API_VERSION}/" + route
end
headers() click to toggle source
# File lib/currency_cloud/request_handler.rb, line 62
def headers
  headers = {}
  headers['X-Auth-Token'] = session.token if session && session.token
  headers['User-Agent'] = user_agent
  headers
end
process_options(opts) click to toggle source
# File lib/currency_cloud/request_handler.rb, line 49
def process_options(opts)
  options = { headers: headers }
  options.merge(opts)
end
process_params(params) click to toggle source
# File lib/currency_cloud/request_handler.rb, line 54
def process_params(params)
  if session && session.on_behalf_of && CurrencyCloud::UUID_REGEX.match(session.on_behalf_of)
    params[:on_behalf_of] = session.on_behalf_of
  end

  params
end
retry_authenticate(verb, route, params, opts) { |full_url, params, options| ... } click to toggle source
# File lib/currency_cloud/request_handler.rb, line 25
def retry_authenticate(verb, route, params, opts)
  should_retry = opts[:should_retry].nil? ? true : opts.delete(:should_retry)

  params = process_params(params)
  full_url = build_url(route)

  response = nil
  retry_count = should_retry ? 0 : 2
  while retry_count < 3
    options = process_options(opts)
    response = yield(full_url, params, options)
    break unless response.code == 401 && should_retry
    session.reauthenticate
    retry_count += 1
  end

  response_handler = CurrencyCloud::ResponseHandler.new(verb, full_url, params, response)
  response_handler.process
rescue ApiError, UnexpectedError
  raise
rescue StandardError => e
  raise UnexpectedError.new(verb, full_url, params, e)
end
user_agent() click to toggle source
# File lib/currency_cloud/request_handler.rb, line 73
def user_agent
  "CurrencyCloudSDK/2.0 Ruby/#{CurrencyCloud::VERSION}"
end