Creating a rails 3 app generator executable using thor

Kristian Mandrup
Thu, 28 Jan 2010 16:48:26 -0000

For inspiration I have been looking into rails 3.0pre

I found this in the file bin/rails
--
...
require ''rails/generators''
require ''generators/rails/app/app_generator''

Rails::Generators::AppGenerator.start
--

framework.task
--
...
  desc "Applies the template supplied by LOCATION=/path/to/template"
  task :template do
    template = ENV["LOCATION"]
    template = File.expand_path(template) if template !~ %r{\A[A-Za-z]
[A-Za-z0-9+\-\.]*://}

    require ''rails/generators''
    require ''generators/rails/app/app_generator''
    generator = Rails::Generators::AppGenerator.new [ Rails.root ],
{}, :destination_root => Rails.root
    generator.apply template, :verbose => false
  end

  namespace :update do
    def invoke_from_app_generator(method)
      require ''rails/generators''
      require ''generators/rails/app/app_generator''

      generator = Rails::Generators::AppGenerator.new ["rails"],
{ :with_dispatchers => true },
                                                      :destination_root
=> Rails.root
      generator.invoke(method)
    end

    desc "Update config/boot.rb from your current rails install"
    task :configs do
      invoke_from_app_generator :create_boot_file
      invoke_from_app_generator :create_config_files
    end

    desc "Update Prototype javascripts from your current rails
install"
    task :javascripts do
      invoke_from_app_generator :create_prototype_files
    end

    desc "Add new scripts to the application script/ directory"
    task :scripts do
      invoke_from_app_generator :create_script_files
    end
--

and in railties3.0pre.gemspec
--
..
  s.default_executable = %q{rails}
  s.executables = ["rails"]
..
--

So I assume, to make a gem executable, you simply need to define the
executables, put an executable in the bin folder, fx bin/my_executable
and have that executable require and then call start on the
application generator?

Thanks!

Kristian