Modular routing in rails and merb (acts_as_routing)
Here’s a proof of concept plugin that will monkeypatch Rails or Merb routing to allow you to define “acts as blocks” anywhere throughout your application (i.e. a plugin) and then use them in your routes file.
Imagine the plugin acts_as_commentable defines the following in its init.rb:
ActionController::Routing.routes_for_acts_as(:commentable) do |map| map.resources :comments map.best_comment '/best-comment', :controller => 'comments', :action => 'best' end
If you added these :acts_as to your config/routes.rb:
ActionController::Routing::Routes.draw do |map| map.resources :people, :acts_as => [:commentable] map.resources :posts, :acts_as => [:commentable] end
You could then use these routes throughout your application:
<%=person_comments_path(Person.first)%> <%=post_comments_path(Post.first)%> <%=person_best_comment_path(Person.first)%>
This is equivalent to doing:
ActionController::Routing::Routes.draw do |map| map.resources :people do |people_map| people_map.resources :comments people_map.best_comment '/best-comment', :controller => 'comments', :action => 'best' end map.resources :posts do |posts_map| posts_map.resources :comments posts_map.best_comment '/best-comment', :controller => 'comments', :action => 'best' end end
The plugin is available on github: http://github.com/hungrymachine/acts_as_routing/tree/master
P.S. At some point, I’ll submit patches to Rails and Merb so this functionality is native rather than provided via a monkeypatching plugin.

WARREN! This is awesome!
Dont You just Love this ? Its GREAT!! THE BEST!!