class RequestHeadersMiddleware::Middleware

The Middleware that stores the header. Default is only to store the X-Request-Id or the action_dispatch.request_id from environment if not set.

Public Class Methods

new(app) click to toggle source
# File lib/request_headers_middleware/middleware.rb, line 9
def initialize(app)
  @app = app
end

Public Instance Methods

call(env) click to toggle source
# File lib/request_headers_middleware/middleware.rb, line 13
def call(env)
  RequestStore.store[:headers] = filter(headers(env))
  RequestHeadersMiddleware.callbacks.each { |cb| cb.call(env) }
  @app.call(env)
end

Private Instance Methods

blacklist(headers) click to toggle source
# File lib/request_headers_middleware/middleware.rb, line 51
def blacklist(headers)
  headers.reject do |key, _|
    RequestHeadersMiddleware.blacklist.include?(key.downcase)
  end
end
default_headers(env) click to toggle source
# File lib/request_headers_middleware/middleware.rb, line 57
def default_headers(env)
  { "X-Request-Id": env['action_dispatch.request_id'] }
end
filter(headers) click to toggle source
# File lib/request_headers_middleware/middleware.rb, line 26
def filter(headers)
  if RequestHeadersMiddleware.whitelist &&
     !RequestHeadersMiddleware.whitelist.empty?
    whitelist(headers)
  else
    blacklist(headers)
  end
end
headers(env) click to toggle source
# File lib/request_headers_middleware/middleware.rb, line 21
def headers(env)
  default_headers(env)
    .merge(Hash[*sanitize_headers(select_headers(env)).sort.flatten])
end
sanitize_headers(headers) click to toggle source
# File lib/request_headers_middleware/middleware.rb, line 39
def sanitize_headers(headers)
  headers.collect { |k, v| [k.sub(/^HTTP_/, ''), v] }.collect do |k, v|
    [k.split('_').collect(&:capitalize).join('-').to_sym, v]
  end
end
select_headers(env) click to toggle source
# File lib/request_headers_middleware/middleware.rb, line 35
def select_headers(env)
  env.select { |k, _v| k.start_with? 'HTTP_' }
end
whitelist(headers) click to toggle source
# File lib/request_headers_middleware/middleware.rb, line 45
def whitelist(headers)
  headers.select do |key, _|
    RequestHeadersMiddleware.whitelist.include?(key.downcase)
  end
end