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
--
Aha! Require the app generator and then start it :)
then in *framework.task*
--
...
desc "Applies the template supplied by LOCATION=/path/to/template"
task :template do
...
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
--
Here the utility method invoke_from_app_generator requires the app
generator and invokes a specific method.
Specific tasks then use this utility method to execute specific parts
of the app generator as needed...
and in railties3.0pre.gemspec
--
..
s.default_executable = %q{rails}
s.executables = ["rails"]
..
--
Defines the executable rails found in the *bin* folder
So I assume, to make a gem executable, you simply need to
1. define the executables in the gemspec
2. put an executable in the bin folder, fx bin/my_executable
3. have that executable require a generator and then call start on the
generator
4. install the gem
5. run the executable passing in any defined arguments as per the
generator
Commens, ideas, suggestions?
Thanks!
Kristian
--
You received this message because you are subscribed to the Google Groups
"Ruby on Rails: Talk" group.
To post to this group, send email to
rubyonrails-talk-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org
To unsubscribe from this group, send email to
rubyonrails-talk+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/Ez6ZCGd0@public.gmane.org
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en.