Class: Roda::RodaPlugins::Middleware::Forwarder
- Inherits:
-
Object
- Object
- Roda::RodaPlugins::Middleware::Forwarder
- Defined in:
- lib/roda/plugins/middleware.rb
Overview
Forwarder instances are what is actually used as middleware.
Instance Method Summary collapse
-
#call(env) ⇒ Object
When calling the middleware, first call the current middleware.
-
#initialize(mid, app, *args, &block) ⇒ Forwarder
constructor
Make a subclass of
mid
to use as the current middleware, and storeapp
as the next middleware to call.
Constructor Details
#initialize(mid, app, *args, &block) ⇒ Forwarder
Make a subclass of mid
to use as the current middleware, and store app
as the next middleware to call.
87 88 89 90 91 92 93 94 95 |
# File 'lib/roda/plugins/middleware.rb', line 87 def initialize(mid, app, *args, &block) @mid = Class.new(mid) if configure = @mid.opts[:middleware_configure] configure.call(@mid, *args, &block) elsif block || !args.empty? raise RodaError, "cannot provide middleware args or block unless loading middleware plugin with a block" end @app = app end |
Instance Method Details
#call(env) ⇒ Object
When calling the middleware, first call the current middleware. If this returns a result, return that result directly. Otherwise, pass handling of the request to the next middleware.
100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 |
# File 'lib/roda/plugins/middleware.rb', line 100 def call(env) res = nil call_next = catch(:next) do env[@mid.opts[:middleware_env_var]] = true res = @mid.call(env) false end if call_next res = @app.call(env) end if handle_result = @mid.opts[:middleware_handle_result] handle_result.call(env, res) end res end |