class AmexTokenizationClient::Request
Attributes
headers[R]
logger[R]
request[R]
uri[R]
Public Class Methods
new(method, path, headers, logger:)
click to toggle source
# File lib/amex_tokenization_client/request.rb, line 10 def initialize(method, path, headers, logger:) @logger = logger @uri = URI(path) @request = Net::HTTP.const_get(method.capitalize).new(uri) @headers = headers headers.each_pair { |k, v| request[k] = v } end
Public Instance Methods
fail_unless_expected_response(response, *allowed_responses)
click to toggle source
# File lib/amex_tokenization_client/request.rb, line 64 def fail_unless_expected_response(response, *allowed_responses) unless allowed_responses.any? { |allowed| response.is_a?(allowed) } logger.error "#{response.inspect}: #{response.body}" raise UnexpectedHttpResponse, response end response end
https(uri)
click to toggle source
# File lib/amex_tokenization_client/request.rb, line 30 def https(uri) Net::HTTP.new(uri.host, uri.port).tap do |http| http.use_ssl = true end end
log_request_response(data = nil) { || ... }
click to toggle source
Log URI, method, data Start timer. Yield URI, method, data. Log response and time taken.
# File lib/amex_tokenization_client/request.rb, line 40 def log_request_response(data = nil) logger.info "[#{self.class.name}] request = #{request.method} #{uri}#{data ? '?' + data : ''}" logger.info "[#{self.class.name}] request_id = #{headers['x-amex-request-id']}" response = nil tms = Benchmark.measure do response = yield end logger.info("[#{self.class.name}] response (#{ms(tms)}ms): #{response.inspect} #{response.body}") response end
ms(tms)
click to toggle source
# File lib/amex_tokenization_client/request.rb, line 51 def ms(tms) (tms.real*1000).round(3) end
send(data = nil)
click to toggle source
Create HTTP request with provided headers. Invoke request over HTTPS. Return response on success or log failure and throw error.
# File lib/amex_tokenization_client/request.rb, line 21 def send(data = nil) request.body = data if data response = log_request_response(data) do https(uri).request(request) end fail_unless_expected_response response, Net::HTTPSuccess response.body end