Forum: Ruby on Rails Building a Root Route with a Generator

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
346fbd85ecda084fc0757e14f60b564b?d=identicon&s=25 Tim K. (Guest)
on 2008-12-01 16:53
(Received via mailing list)
I'm looking for a better approach... then what I'm currently doing.

I'm working on a generator that will help me setup my base projects
with many of my common defaults that I use internally. Now I know that
generators have the route_resources method that allows a person to
create a resource in the routes file, but is there a way to create the
map.root :controller => 'name' entry as well?

Here is what I've done. I customized the route_resources method to be
something like this:

    def add_root_route
      sentinel = 'ActionController::Routing::Routes.draw do |map|'
      gsub_file 'config/routes.rb', /(#{Regexp.escape(sentinel)})/mi
do |match|
        "#{match}\n  map.root :controller => \"welcome\"\n"
      end
    end

And then just copied the gsub_file method to my generator (it was a
protected method and I couldn't think of another way to execute it -
thoughts?).

I then have a bit that does:

      action = File.basename($0)
      case action
        when "generate"
          add_root_route
        when "destroy"
          puts
"------------------------------------------------------------"
          puts "Make sure you remove the map.root from the /config/
routes.rb"
          puts
"------------------------------------------------------------"
      end

Which makes sure it only runs when they are running generate.

My question is this... Is there an better way to be doing this? It
seems like a lot of insanity just to add a root route.
4b1b339ee3f96d37aba2adfa3e03276e?d=identicon&s=25 Brandon Keepers (Guest)
on 2008-12-01 18:35
(Received via mailing list)
On Mon, Dec 1, 2008 at 10:52 AM, Tim K. <jangchub@gmail.com> wrote:
> My question is this... Is there an better way to be doing this? It
> seems like a lot of insanity just to add a root route.

You would think so, but there doesn't seem to be.  `script/generate
resource` also adds routes, but looking at the source, they're doing
something similar:

        def route_resources(*resources)
          resource_list = resources.map { |r| r.to_sym.inspect }.join(',
')
          sentinel = 'ActionController::Routing::Routes.draw do |map|'

          logger.route "map.resources #{resource_list}"
          unless options[:pretend]
            gsub_file 'config/routes.rb',
/(#{Regexp.escape(sentinel)})/mi do |match|
              "#{match}\n  map.resources #{resource_list}\n"
            end
          end
        end

Brandon
--
--------------------------------------------------------------------------------
Training by Collective Idea: Ruby on Rails training in a vacation
setting
http://training.collectiveidea.com – San Antonio, TX – Jan 20-23
346fbd85ecda084fc0757e14f60b564b?d=identicon&s=25 Tim K. (Guest)
on 2008-12-01 19:27
(Received via mailing list)
Okay cool. Is there a better way to call gsub_file protected method
then by copying it into the generator? It's in
Rails::Generator::Commands::Base.
This topic is locked and can not be replied to.