Module: Roda::RodaPlugins::NamedRoutes
- Defined in:
- lib/roda/plugins/named_routes.rb
Overview
The named_routes plugin allows for multiple named routes, which the main route block can dispatch to by name at any point by calling r.route
. If the named route doesn’t handle the request, execution will continue, and if the named route does handle the request, the response returned by the named route will be returned.
Example:
plugin :multi_route
route('foo') do |r|
r.is 'bar' do
'/foo/bar'
end
end
route('bar') do |r|
r.is 'foo' do
'/bar/foo'
end
end
route do |r|
r.on "foo" do
r.route 'foo'
end
r.on "bar" do
r.route 'bar'
end
end
Note that in multi-threaded code, you should not attempt to add a named route after accepting requests.
To handle development environments that reload code, you can call the route
class method without a block to remove an existing named route.
Routing Files
The convention when using the named_routes plugin is to have a single named route per file, and these routing files should be stored in a routes subdirectory in your application. So for the above example, you would use the following files:
routes/.rb
routes/foo.rb
Namespace Support
The named_routes plugin also has support for namespaces, allowing you to use r.route
at multiple levels in your routing tree. Example:
route('foo') do |r|
r.on("baz"){r.route("baz", "foo")}
r.on("quux"){r.route("quux", "foo")}
end
route('bar') do |r|
r.on("baz"){r.route("baz", "bar")}
r.on("quux"){r.route("quux", "bar")}
end
route('baz', 'foo') do |r|
# handles /foo/baz prefix
end
route('quux', 'foo') do |r|
# handles /foo/quux prefix
end
route('baz', 'bar') do |r|
# handles /bar/baz prefix
end
route('quux', 'bar') do |r|
# handles /bar/quux prefix
end
route do |r|
r.on "foo" do
r.route("foo")
end
r.on "bar" do
r.route("bar")
end
end
Routing Files
The convention when using namespaces with the multi_route plugin is to store the routing files in subdirectories per namespace. So for the above example, you would have the following routing files:
routes/.rb
routes//baz.rb
routes//quux.rb
routes/foo.rb
routes/foo/baz.rb
routes/foo/quux.rb
Defined Under Namespace
Modules: ClassMethods, RequestMethods
Class Method Summary collapse
-
.configure(app) ⇒ Object
Initialize storage for the named routes.
Class Method Details
.configure(app) ⇒ Object
Initialize storage for the named routes.
109 110 111 |
# File 'lib/roda/plugins/named_routes.rb', line 109 def self.configure(app) app.opts[:namespaced_routes] ||= {} end |