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