Module: Roda::RodaPlugins::ClassLevelRouting
- Defined in:
- lib/roda/plugins/class_level_routing.rb
Overview
The class_level_routing plugin adds routing methods at the class level, which can
be used instead of or in addition to using the normal route method to start the
routing tree. If a request is not matched by the normal routing tree, the class
level routes will be tried. This offers a more Sinatra-like API, while
still allowing you to use a routing tree inside individual actions.
Here's the first example from the README, modified to use the class_level_routing plugin:
class App < Roda
plugin :class_level_routing
# GET / request
root do
request.redirect "/hello"
end
# GET /hello/world request
get "hello/world" do
"Hello world!"
end
# /hello request
is "hello" do
# Set variable for both GET and POST requests
@greeting = 'Hello'
# GET /hello request
request.get do
"#{@greeting}!"
end
# POST /hello request
request.post do
puts "Someone said #{@greeting}!"
request.redirect
end
end
end
When using the class_level_routing plugin with nested routes, you may also want to use the
delegate plugin to delegate certain instance methods to the request object, so you don't have
to continually use request. in your routing blocks.
Note that class level routing is implemented via a simple array of routes, so routing performance
will degrade linearly as the number of routes increases. For best performance, you should use
the normal route class method to define your routing tree. This plugin does make it simpler to
add additional routes after the routing tree has already been defined, though.
Defined Under Namespace
Modules: ClassMethods, InstanceMethods
Class Method Summary collapse
-
.configure(app) ⇒ Object
Initialize the class_routes array when the plugin is loaded.
Class Method Details
.configure(app) ⇒ Object
Initialize the class_routes array when the plugin is loaded. Also, if the application doesn't currently have a routing block, setup an empty routing block so that things will still work if a routing block isn't added.
58 59 60 |
# File 'lib/roda/plugins/class_level_routing.rb', line 58 def self.configure(app) app.opts[:class_level_routes] ||= [] end |