i reading this article on rack middleware. states following:
rack more interface can used talk web server. it’s used group , order modules, ruby classes, , specify dependency between them. rack::builder puts these modules on top of each other, creating stack-like structure of final web application.
so basically, can use ruby classes stack middleware on top of each other. need reference next middleware - kind of reminds me of decorator design pattern.
all need have constructor takes next application (middleware in stack) paraemter. second, need define call method, takes environment hash parameter , returns array of status code, environment hash , response body.
this example provided:
# shrimp.rb class shrimp def initialize(app) @app = app end def call(env) @app.call(env) end end # config.ru require 'rack' require 'rack/lobster' require 'shrimp' use shrimp run rack::lobster.new </pre> according rack documentation, use method adds middleware stack, , run method dispatches application. i'm little confused syntax. use adds shrimp middleware stack , run passes lobster instance shrimp constructor? still confused role of run here.
the article have linked mentions rack comes sample application lobster yes, start, app.
the shrimp class ruby class how middleware should written.
in config.ru file, require modules, register middleware, , run application.
use adds shrimp middleware stack , run passes lobster instance shrimp constructor?
you right when use adds shrimp middleware stack run not pass lobster instance shrimp constructor. run executes rack application , passing app instance how rack works internally. real thing happens in use part register middleware.
for example:
# config.ru require 'rack' require 'rack/lobster' require 'shrimp_1' require 'shrimp_2' require 'shrimp_3' use shrimp_1 use shrimp_2 use shrimp_3 run rack::lobster.new </pre> all 3 shrimp classes passed app(lobster) instance in order , handled rack itself.
Comments
Post a Comment