Sha256: 177d411f75c31ce6539f70a8749353fa726260afa30f4ea38bd22efc7790114e
Contents?: true
Size: 1.96 KB
Versions: 2
Compression:
Stored size: 1.96 KB
Contents
module CurrencyCloud class RequestHandler attr_reader :session def initialize(session = CurrencyCloud.session) @session = session end 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 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 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 => e raise UnexpectedError.new(verb, full_url, params, e) end def process_options(opts) options = { headers: headers } # options[:debug_output] = $stdout options.merge(opts) # options end 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 def headers headers = {} headers['X-Auth-Token'] = session.token if session && session.token headers end def build_url(route) "#{session.environment_url}/#{CurrencyCloud::API_VERSION}/" + route end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
currency_cloud-0.8.2 | lib/currency_cloud/request_handler.rb |
currency_cloud-0.8.0 | lib/currency_cloud/request_handler.rb |