La Estructura de una Aplicación Rack: Ejemplo de Middleware

[~/local/src/ruby/sinatra/rack/rack-debugging(master)]$ cat middlefoo.rb 
require 'rack'

class MiddleFoo
  
  def initialize(app)
    @app = app
  end

  def call env
    # Podemos modificar el request (env) aqui
    env['chuchu'] = 'SYTW'
    status, headers, body = @app.call(env)
    # Podemos modificar la respuesta aqui
    newbody = body.map(&:upcase)
    [status, headers, newbody]
  end
end

[~/local/src/ruby/sinatra/rack/rack-debugging(master)]$ cat hello_middle.rb 
require 'rack'
require './middlefoo'

class HelloWorld
  def call env
    [200, {"Content-Type" => "text/plain"}, ["Hello world\nchuchu=#{env['chuchu']}\n"]]
  end
end

Rack::Handler::WEBrick::run MiddleFoo.new(HelloWorld.new)

Cuando ejecutamos el programa produce la salida:

HELLO WORLD
CHUCHU=SYTW



Casiano Rodriguez León 2015-01-07