Class: Halcyon::Application::Router
- Inherits:
-
Merb::Router
- Object
- Merb::Router
- Halcyon::Application::Router
- Defined in:
- lib/halcyon/application/router.rb
Overview
Routing
Handles routing.
Usage
class Halcyon::Application
route do |r|
r.match('/path/to/match').to(:controller => 'a', :action => 'b')
{:action => 'not_found'} # the default route
end
end
Default Routes
Supplying a default route if none of the others match is good practice,
but is unnecessary as the predefined route is always, automatically,
going to contain a redirection to the not_found method which already
exists in Halcyon::Controller. This method is freely overwritable, and
is recommended for those that wish to handle unroutable requests
themselves.
In order to set a different default route, simply end the call to route
with a hash containing the action (and optionally the module) to run.
The Hard Work
The mechanics of the router are solely from the efforts of the Merb community. This functionality is completely ripped right out of Merb and makes it functional. All credit to them, and be sure to check out their great framework: if Halcyon isn't quite what you need, maybe Merb is.
Class Method Summary collapse
-
.default_to(route) ⇒ Object
Retrieves the last value from the
routecall in Halcyon::Controller and, if it's a Hash, sets it to@@default_routeto designate the failover route. -
.route(request) ⇒ Object
Called internally by the Halcyon::Controller#call method to match the current request against the currently defined routes.
Class Method Details
.default_to(route) ⇒ Object
Retrieves the last value from the route call in Halcyon::Controller
and, if it's a Hash, sets it to @@default_route to designate the
failover route. If route is not a Hash, though, the internal default
should be used instead (as the last returned value is probably a Route
object returned by the r.match().to() call).
route the default route, or nothing to use not_found
Used exclusively internally.
Returns nothing
54 55 56 |
# File 'lib/halcyon/application/router.rb', line 54 def default_to(route) @@default_route = route.is_a?(Hash) ? route : {:action => 'not_found'} end |
.route(request) ⇒ Object
Called internally by the Halcyon::Controller#call method to match
the current request against the currently defined routes. Returns the
params list defined in the to routing definition, opting for the
default route if no match is made.
request the request object to route against
Returns Hash::action=>..., ...
65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 |
# File 'lib/halcyon/application/router.rb', line 65 def route(request) req = Struct.new(:path, :method, :params).new(request.path_info, request.request_method.downcase.to_sym, request.params) # perform match route = self.match(req) # make sure a route is returned even if no match is found if route[0].nil? #return default route self.logger.debug "No route found. Using default." @@default_route else # params (including action and module if set) for the matching route route[1] end end |