lib/marlowe/middleware.rb in marlowe-1.0.2 vs lib/marlowe/middleware.rb in marlowe-1.0.3

- old
+ new

@@ -2,25 +2,35 @@ require 'request_store' require 'securerandom' module Marlowe # Marlowe correlation id middleware. Including this into your - # middleware stack will add a 'Correlation-Id' header as an incoming + # middleware stack will add a correlation id header as an incoming # request, and save that id in a request session variable. + # Name of the default header to look for and put the correlation id in. + CORRELATION_HEADER = 'Correlation-Id'.freeze + class Middleware # Sets the the rack application to +app+ - def initialize(app) + def initialize(app, opts={}) @app = app + @correlation_header = format_http_header(opts[:correlation_header] || Marlowe::CORRELATION_HEADER) end # Stores the incoming correlation id from the +env+ hash. If the correlation # id has not been sent, a new UUID is generated and the +env+ is modified. def call(env) - env['HTTP_CORRELATION_ID'] ||= SecureRandom.uuid - RequestStore.store[:correlation_id] = env['HTTP_CORRELATION_ID'] + env[@correlation_header] ||= SecureRandom.uuid + RequestStore.store[:correlation_id] = env[@correlation_header] @status, @headers, @response = @app.call(env) [@status, @headers, @response] + end + + private + + def format_http_header(header) + ("HTTP_" + header.gsub(/-/, '_').upcase).freeze end end end