class Fixings::SilentLogMiddleware

Rack middleware to silence the logger for stuff we don't need. Uses semantic_logger's Logger#silence to do stuff, so it's simple. Based on github.com/stve/silencer

Constants

METHODS

Public Class Methods

new(app, options = {}) click to toggle source
# File lib/fixings/silent_log_middleware.rb, line 9
def initialize(app, options = {})
  @app = app
  @silence = wrap(options.delete(:silence))
  @routes = define_routes(@silence, options)
end

Public Instance Methods

call(env) click to toggle source
# File lib/fixings/silent_log_middleware.rb, line 15
def call(env)
  if silent_request?(env)
    Rails.logger.silence(:error) do
      @app.call(env)
    end
  else
    @app.call(env)
  end
end
define_routes(silence_paths, opts) click to toggle source
# File lib/fixings/silent_log_middleware.rb, line 25
def define_routes(silence_paths, opts)
  METHODS.each_with_object({}) do |method, routes|
    routes[method.to_s.upcase] = wrap(opts.delete(method)) + silence_paths
    routes
  end
end
silent_request?(env) click to toggle source
# File lib/fixings/silent_log_middleware.rb, line 42
def silent_request?(env)
  (@routes[env["REQUEST_METHOD"]] || @silence).any? do |rule|
    case rule
    when String, Integer
      rule.to_s == env["PATH_INFO"]
    when Regexp
      rule =~ env["PATH_INFO"]
    else
      false
    end
  end
end
wrap(object) click to toggle source
# File lib/fixings/silent_log_middleware.rb, line 32
def wrap(object)
  if object.nil?
    []
  elsif object.respond_to?(:to_ary)
    object.to_ary || [object]
  else
    [object]
  end
end