class RfLogger::RequestMiddleware

Constants

REQUEST_ID_ENV

Public Class Methods

new(app, options={}) click to toggle source

@param [Hash] options @option opts [Hash{:label => [“header_name”, /or regex/]}] :tagged match on rack request env keys. First value found has priority.

# File lib/rf_logger/request/request_middleware.rb, line 13
def initialize(app, options={})
  @app    = app
  @tagged = options.fetch(:tagged, { request_id: REQUEST_ID_ENV })
end

Public Instance Methods

call(env) click to toggle source
# File lib/rf_logger/request/request_middleware.rb, line 18
def call(env)
  @env = env
  set_tagged_thread_var
  @app.call(@env)
end
tagged() click to toggle source
# File lib/rf_logger/request/request_middleware.rb, line 24
def tagged
  @tagged.each_with_object({}) do |(label, matches), tags|
    [*matches].each do |match|
      break if (val = find_by(match)) && (tags[label] = val)
    end
  end
end

Private Instance Methods

find_by(match) click to toggle source
# File lib/rf_logger/request/request_middleware.rb, line 34
def find_by(match)
  case match
  when String
    @env[match]
  when Regexp
    (@env.find { |k, _| match =~ k }|| []).last
  else
    raise "Unknown tagged match type: #{match}"
  end
end
set_tagged_thread_var() click to toggle source
# File lib/rf_logger/request/request_middleware.rb, line 45
def set_tagged_thread_var
  Thread.current.set_inheritable_attribute(:rf_logger_request_tags, tagged)
end