Class: BugBunny::Middleware::Stack

Inherits:
Object
  • Object
show all
Defined in:
lib/bug_bunny/middleware/stack.rb

Overview

Gestiona una pila (stack) de middlewares para procesar peticiones y respuestas.

Implementa el patrón “Builder” para construir una cadena de responsabilidades. Permite registrar clases de middleware que envolverán la ejecución final (el Producer). Es similar en funcionamiento a ‘Rack::Builder` o `Faraday::RackBuilder`.

Examples:

Construcción manual

stack = BugBunny::Middleware::Stack.new
stack.use BugBunny::Middleware::Logger
stack.use BugBunny::Middleware::JsonResponse

# 'app' será el Logger, que llama a JsonResponse, que llama a final_producer
app = stack.build(final_producer)
app.call(request)

Instance Method Summary collapse

Constructor Details

#initializeStack

Inicializa una nueva pila de middlewares vacía.



21
22
23
# File 'lib/bug_bunny/middleware/stack.rb', line 21

def initialize
  @middlewares = []
end

Instance Method Details

#build(final_app) ⇒ Object

Construye la cadena de ejecución (app) componiendo todos los middlewares registrados.

Itera sobre los middlewares en orden inverso, envolviendo la ‘final_app` capa por capa. Esto asegura que el primer middleware agregado con #use sea el más externo y, por tanto, el primero en recibir la llamada `call`.

Parameters:

  • final_app (Proc, Object)

    El objeto final que recibirá la petición (generalmente el Producer). Debe responder a ‘call`.

Returns:

  • (Object)

    El primer eslabón de la cadena (el middleware más externo).



43
44
45
46
47
# File 'lib/bug_bunny/middleware/stack.rb', line 43

def build(final_app)
  @middlewares.reverse.inject(final_app) do |app, config|
    config[:klass].new(app, *config[:args], &config[:block])
  end
end

#use(klass, *args) {|block| ... } ⇒ Array

Registra un middleware en la pila.

Parameters:

  • klass (Class)

    La clase del middleware. Debe tener un constructor ‘initialize(app, *args)` y un método `call(env)`.

  • args (Array)

    Argumentos opcionales que se pasarán al constructor del middleware.

Yields:

  • (block)

    Bloque opcional que se pasará al constructor del middleware.

Returns:

  • (Array)

    La lista actualizada de configuraciones de middleware.



31
32
33
# File 'lib/bug_bunny/middleware/stack.rb', line 31

def use(klass, *args, &block)
  @middlewares << { klass: klass, args: args, block: block }
end