class RequestStoreRails::Middleware

Public: Middleware that takes care of setting a thread-local variable, which enables RequestLocals to associate threads with the store for a request.

Public Class Methods

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

Public Instance Methods

call(env) click to toggle source

Internal: Assigns a thread-local variable to identify the current store, and cleans up all the variables stored for the request once it finishes.

# File lib/request_store_rails/middleware.rb, line 15
def call(env)
  RequestLocals.set_current_store_id(extract_request_id(env))
  @app.call(env)
ensure
  RequestLocals.clear!
  RequestLocals.set_current_store_id(nil)
end

Protected Instance Methods

extract_request_id(env) click to toggle source

Internal: Extracts the request id from the environment, or generates one.

NOTE: We always generate an id to prevent accidental conflicts from an externally provided one, but subclasses of this middleware might override it.

# File lib/request_store_rails/middleware.rb, line 30
def extract_request_id(env)
  SecureRandom.uuid
end