Class: Reaxar::Middleware::MiddlewareStack

Inherits:
Object
  • Object
show all
Defined in:
lib/reaxar/middleware/middleware_stack.rb

Overview

Manages a stack of HTTP middleware and applies them to requests and responses.

Examples:

stack = Reaxar::Middleware::MiddlewareStack.new
stack.use(MyMiddleware.new)
request = stack.run(request)
response = stack.process_response(response, request)

Instance Method Summary collapse

Constructor Details

#initializeMiddlewareStack

Initializes a new, empty middleware stack.



14
15
16
# File 'lib/reaxar/middleware/middleware_stack.rb', line 14

def initialize
  @stack = []
end

Instance Method Details

#process_response(response, request) ⇒ Object, Symbol

Runs all middleware on the response in reverse order.

Parameters:

  • response (Object)

    The HTTP response.

  • request (Hash)

    The original request.

Returns:

  • (Object, Symbol)

    The processed response or :retry_request.



38
39
40
41
42
43
44
45
46
# File 'lib/reaxar/middleware/middleware_stack.rb', line 38

def process_response(response, request)
  @stack.reverse.reduce(response) do |resp, middleware|
    result = middleware.process_response(resp, request)

    return :retry_request if result == :retry_request

    result || resp
  end
end

#run(request) ⇒ Hash

Runs all middleware on the request in order.

Parameters:

  • request (Hash)

    The request data.

Returns:

  • (Hash)

    The processed request.



28
29
30
31
32
# File 'lib/reaxar/middleware/middleware_stack.rb', line 28

def run(request)
  @stack.reduce(request) do |req, middleware|
    middleware.process_request(req) || req
  end
end

#use(middleware) ⇒ void

This method returns an undefined value.

Adds a middleware to the stack.

Parameters:

  • middleware (Object)

    The middleware instance to add.



21
22
23
# File 'lib/reaxar/middleware/middleware_stack.rb', line 21

def use(middleware)
  @stack << middleware
end