Module: Roda::RodaPlugins::MultiRun
- Defined in:
- lib/roda/plugins/multi_run.rb
Overview
The multi_run plugin provides the ability to easily dispatch to other rack applications based on the request path prefix. First, load the plugin:
class App < Roda
plugin :multi_run
end
Then, other rack applications can register with the multi_run plugin:
App.run "ra", PlainRackApp
App.run "ro", OtherRodaApp
App.run "si", SinatraApp
Inside your route block, you can call r.multi_run to dispatch to all three rack applications based on the prefix:
App.route do |r|
r.multi_run
end
This will dispatch routes starting with /ra
to PlainRackApp
, routes starting with /ro
to OtherRodaApp
, and routes starting with /si
to SinatraApp.
You can pass a block to multi_run
that will be called with the prefix, before dispatching to the rack app:
App.route do |r|
r.multi_run do |prefix|
# do something based on prefix before the request is passed further
end
end
This is useful for modifying the environment before passing it to the rack app.
The multi_run plugin is similar to the multi_route plugin, with the difference being the multi_route plugin keeps all routing subtrees in the same Roda app/class, while multi_run dispatches to other rack apps. If you want to isolate your routing subtrees, multi_run is a better approach, but it does not let you set instance variables in the main Roda app and have those instance variables usable in the routing subtrees.
Defined Under Namespace
Modules: ClassMethods, RequestClassMethods, RequestMethods
Class Method Summary collapse
-
.configure(app) ⇒ Object
Initialize the storage for the dispatched applications.
Class Method Details
.configure(app) ⇒ Object
Initialize the storage for the dispatched applications
50 51 52 |
# File 'lib/roda/plugins/multi_run.rb', line 50 def self.configure(app) app.opts[:multi_run_apps] ||= {} end |