Should add param support to routes?
boazsegev opened this issue · comments
I'm just thinking out loud if the routes method should support parameters / optional parameters, so we could have something like this:
route '/(:locale{en|de|ru})/book/:id' do
params[:locale] # => en or de or ru
params[:id] # => id supplied
end
seems like a nice touch, but should be in the core library or in a different gem (if at all)?
From my perspective, the price for magic routes is't worth it.
Adding features that are sometimes used is exactly what Anorexic is trying to avoid.
Since it is possible to use Regexp in routes, it seems easy enough to get the same result using a "SuperController" class and a correctly parsed routing system.
It's quite simple to rewrite the path as well, so that the "SuperController" could use the before
filter to extract any parameters and rewrite the path for a simple routing system.
an app could apply it's own preferred path scheme doing something like this:
class SuperC
def before
result = request.match /^\/(en|he|ru|hu)(\/?.*)/
if result
params["locale"] = result[1].to_sym
end
request.path_info = result[2]
return false
end
end
listen
route '*', SuperC
# routes
This will also allow an app to create it's own link's generator that adhere to it's scheme.
Still working on it...
Due to popular demand, magic routes are back on the table...
I found a way to move most of the heavy lifting for magic routes to the route initialization... so I feel comfortable enough implementing this feature.