class TMSAPI::CustomLogger

Public Class Methods

new(app, options = {}) click to toggle source
# File lib/tmsapi/middleware/custom_logger.rb, line 6
def initialize(app, options = {})
  @app = app
  @logger = options.fetch(:logger) {
    require 'logger'
    ::Logger.new($stdout)
  }
end

Public Instance Methods

call(env) click to toggle source
# File lib/tmsapi/middleware/custom_logger.rb, line 14
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/tmsapi/middleware/custom_logger.rb, line 52
      def debug_message(name, headers, body)
        <<-MESSAGE.gsub(/^ +([^ ])/m, '\\1')
        #{name} Headers:
        ----------------
        #{format_headers(headers)}

        #{name} Body:
        -------------
        #{body}
        MESSAGE
      end
filter(output) click to toggle source
# File lib/tmsapi/middleware/custom_logger.rb, line 28
def filter(output)
  unless ENV['DEBUG'] == '2'
    output = output.to_s.gsub(/api_key=[a-zA-Z0-9-]*/,'api_key=[API-KEY]')
  else
    output
  end
end
format_headers(headers) click to toggle source
# File lib/tmsapi/middleware/custom_logger.rb, line 64
def format_headers(headers)
  length = headers.map {|k,v| 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/tmsapi/middleware/custom_logger.rb, line 44
def request_debug(env)
  debug_message("Request", env[:request_headers], env[:body])
end
request_info(env) click to toggle source
# File lib/tmsapi/middleware/custom_logger.rb, line 36
def request_info(env)
  "Started %s request to: %s" % [ env[:method].to_s.upcase, filter(env[:url]) ]
end
response_debug(env) click to toggle source
# File lib/tmsapi/middleware/custom_logger.rb, line 48
def response_debug(env)
  debug_message("Response", env[:response_headers], env[:body])
end
response_info(env, response_time) click to toggle source
# File lib/tmsapi/middleware/custom_logger.rb, line 40
def response_info(env, response_time)
  "Response from %s; Status: %d; Time: %.1fms" % [ filter(env[:url]), env[:status], (response_time * 1_000.0) ]
end