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