class AmexEnhancedAuthorization::LoggedRequest
An HTTPS request whose content, response and latency are logged.
Attributes
logger[R]
request[R]
uri[R]
Public Class Methods
new(method, path, logger)
click to toggle source
# File lib/amex_enhanced_authorization/logged_request.rb, line 11 def initialize(method, path, logger) @uri = URI(path) @request = Net::HTTP.const_get(method.capitalize).new(@uri) @logger = logger end
Public Instance Methods
headers()
click to toggle source
@return [Hash]
# File lib/amex_enhanced_authorization/logged_request.rb, line 27 def headers @headers ||= {} end
send(data)
click to toggle source
Add provided headers and invoke request over HTTPS. @return response
# File lib/amex_enhanced_authorization/logged_request.rb, line 19 def send(data) headers.each_pair { |k, v| request[k] = v } log_request_response(headers, data) do https(uri).request(request) end end
Protected Instance Methods
https(uri)
click to toggle source
# File lib/amex_enhanced_authorization/logged_request.rb, line 33 def https(uri) Net::HTTP.new(uri.host, uri.port).tap { |http| http.use_ssl = true } end
log_request_response(headers, data = nil) { || ... }
click to toggle source
Log URI, method, data Start timer. Yield to request block. Log response and time taken.
# File lib/amex_enhanced_authorization/logged_request.rb, line 41 def log_request_response(headers, data = nil) logger.info "[#{self.class.name}] request = #{request.method} #{uri}#{data ? '?' + data : ''}" logger.info "[#{self.class.name}] headers = #{headers}" 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_enhanced_authorization/logged_request.rb, line 52 def ms(tms) (tms.real*1000).round(3) end