class FaradayMiddleware::LoudLogger

@private

Public Class Methods

new(app, options = {}) click to toggle source
Calls superclass method
# File lib/faraday/loud_logger.rb, line 10
def initialize(app, options = {})
  super
  @app = app
  @logger = options.fetch(:logger) do
    require 'logger'
    ::Logger.new($stdout)
  end
end

Public Instance Methods

call(env) click to toggle source
# File lib/faraday/loud_logger.rb, line 19
def call(env)
  start_time = Time.now
  info  { request_info(env) }
  debug { request_debug(env) }
  @app.call(env).on_complete do
    end_time = Time.now
    response_time = end_time - start_time
    info  { response_info(env, response_time) }
    debug { response_debug(env) }
  end
end

Private Instance Methods

debug_message(name, headers, body) click to toggle source
# File lib/faraday/loud_logger.rb, line 58
    def debug_message(name, headers, body)
      <<-MESSAGE.gsub(/^ +([^ ])/m, '\\1')
      #{name} Headers:
      ----------------
      #{format_headers(headers)}

      #{name} Body:
      -------------
      #{filter(body)}
      MESSAGE
    end
filter(output) click to toggle source
# File lib/faraday/loud_logger.rb, line 33
def filter(output)
  output
end
format_headers(headers) click to toggle source
# File lib/faraday/loud_logger.rb, line 70
def format_headers(headers)
  length = headers.map { |k, _| k.to_s.size }.max
  headers.map { |name, value| "#{name.to_s.ljust(length)} : #{filter(value)}" }.join("\n")
end
request_debug(env) click to toggle source
# File lib/faraday/loud_logger.rb, line 50
def request_debug(env)
  debug_message('Request', env[:request_headers], env[:body])
end
request_info(env) click to toggle source
# File lib/faraday/loud_logger.rb, line 37
def request_info(env)
  format('Started %<method>s request to: %<url>s', method: env[:method].to_s.upcase, url: filter(env[:url]))
end
response_debug(env) click to toggle source
# File lib/faraday/loud_logger.rb, line 54
def response_debug(env)
  debug_message('Response', env[:response_headers], env[:body])
end
response_info(env, response_time) click to toggle source
# File lib/faraday/loud_logger.rb, line 41
def response_info(env, response_time)
  format(
    'Response from %<method>s; Status: %<status>d; Time: %<time>.1fms',
    method: env[:method].to_s.upcase,
    status: env[:status],
    time: (response_time * 1_000.0)
  )
end