Class: IdempotentRequest::Middleware

Inherits:
Object
  • Object
show all
Defined in:
lib/idempotent-request/middleware.rb

Instance Method Summary collapse

Constructor Details

#initialize(app, config = {}) ⇒ Middleware

Returns a new instance of Middleware.



3
4
5
6
7
8
9
# File 'lib/idempotent-request/middleware.rb', line 3

def initialize(app, config = {})
  @app = app
  @config = config
  @policy = config.fetch(:policy)
  @notifier = ActiveSupport::Notifications if defined?(ActiveSupport::Notifications)
  @conflict_response_status = config.fetch(:conflict_response_status, 429)
end

Instance Method Details

#call(env) ⇒ Object



11
12
13
14
# File 'lib/idempotent-request/middleware.rb', line 11

def call(env)
  # dup the middleware to be thread-safe
  dup.process(env)
end

#process(env) ⇒ Object



16
17
18
19
20
21
22
23
24
# File 'lib/idempotent-request/middleware.rb', line 16

def process(env)
  set_request(env)
  request.env['idempotent.request'] = {}
  return app.call(request.env) unless process?
  request.env['idempotent.request']['key'] = request.key
  response = read_idempotent_request || write_idempotent_request || concurrent_request_response
  instrument(request)
  response
end