class Nav::Logger::HTTPartyFormatter

Constants

IN
OUT

Attributes

level[RW]
logger[RW]
messages[RW]
request[R]
response[R]

Public Class Methods

new(logger, level) click to toggle source
# File lib/nav/logger/httparty_formatter.rb, line 9
def initialize(logger, level)
  @logger = logger
  @level = level.to_sym
  @messages = []
end

Public Instance Methods

format(request, response) click to toggle source
# File lib/nav/logger/httparty_formatter.rb, line 15
def format(request, response)
  @request = request
  @response = response

  library_line = caller.detect{ |line| line !~ /httparty/ }

  log_request
  log_response

  logger.send level, messages.join("\n"), caller: library_line
end

Private Instance Methods

log(direction, line = "") click to toggle source
# File lib/nav/logger/httparty_formatter.rb, line 83
def log(direction, line = "")
  messages << "#{direction} #{line}"
end
log_hash(hash) click to toggle source
# File lib/nav/logger/httparty_formatter.rb, line 79
def log_hash(hash)
  hash.each { |k, v| log(OUT, "#{k}: #{v}") }
end
log_headers() click to toggle source
# File lib/nav/logger/httparty_formatter.rb, line 58
def log_headers
  return unless request.options[:headers] && request.options[:headers].size > 0

  log OUT, "Headers: "
  log_hash request.options[:headers]
end
log_query() click to toggle source
# File lib/nav/logger/httparty_formatter.rb, line 65
def log_query
  return unless request.options[:query]

  log OUT, "Query: "
  log_hash request.options[:query]
end
log_request() click to toggle source
# File lib/nav/logger/httparty_formatter.rb, line 32
def log_request
  log_url
  log_headers
  log_query
  log OUT, request.raw_body if request.raw_body
  log OUT
end
log_response() click to toggle source
# File lib/nav/logger/httparty_formatter.rb, line 40
def log_response
  log IN, "HTTP/#{response.http_version} #{response.code}"
  log_response_headers
  log IN, "\n#{response.body}"
  log IN
end
log_response_headers() click to toggle source
# File lib/nav/logger/httparty_formatter.rb, line 72
def log_response_headers
  headers = response.respond_to?(:headers) ? response.headers : response
  response.each_header do |response_header|
    log IN, "#{response_header.capitalize}: #{headers[response_header]}"
  end
end
log_url() click to toggle source
# File lib/nav/logger/httparty_formatter.rb, line 47
def log_url
  http_method = request.http_method.name.split("::").last.upcase
  uri = if request.options[:base_uri]
          request.options[:base_uri] + request.path.path
        else
          request.path.to_s
        end

  log OUT, "#{http_method} #{uri}"
end