aboutsummaryrefslogtreecommitdiffstats
path: root/railties/lib/rails_generator/scripts.rb
diff options
context:
space:
mode:
Diffstat (limited to 'railties/lib/rails_generator/scripts.rb')
-rw-r--r--railties/lib/rails_generator/scripts.rb81
1 files changed, 81 insertions, 0 deletions
diff --git a/railties/lib/rails_generator/scripts.rb b/railties/lib/rails_generator/scripts.rb
new file mode 100644
index 0000000000..007980dcb5
--- /dev/null
+++ b/railties/lib/rails_generator/scripts.rb
@@ -0,0 +1,81 @@
+require File.dirname(__FILE__) + '/options'
+
+module Rails
+ module Generator
+ module Scripts
+
+ # Generator scripts handle command-line invocation. Each script
+ # responds to an invoke! class method which handles option parsing
+ # and generator invocation.
+ class Base
+ include Options
+ default_options :collision => :ask, :quiet => false
+
+ # Run the generator script. Takes an array of unparsed arguments
+ # and a hash of parsed arguments, takes the generator as an option
+ # or first remaining argument, and invokes the requested command.
+ def run(args = [], runtime_options = {})
+ begin
+ parse!(args, runtime_options)
+
+ # Generator name is the only required option.
+ unless options[:generator]
+ usage if args.empty?
+ options[:generator] ||= args.shift
+ end
+
+ # Look up generator instance and invoke command on it.
+ Rails::Generator::Base.instance(options[:generator], args, options).command(options[:command]).invoke!
+ rescue => e
+ puts e
+ puts " #{e.backtrace.join("\n ")}\n" if options[:backtrace]
+ raise SystemExit
+ end
+ end
+
+ protected
+ # Override with your own script usage banner.
+ def banner
+ "Usage: #{$0} [options] generator [args]"
+ end
+
+ def usage_message
+ usage = "\nInstalled Generators\n"
+ Rails::Generator::Base.sources.each do |source|
+ label = source.label.to_s.capitalize
+ names = source.names
+ usage << " #{label}: #{names.join(', ')}\n" unless names.empty?
+ end
+
+ usage << <<end_blurb
+
+More are available at http://rubyonrails.org/show/Generators
+ 1. Download, for example, login_generator.zip
+ 2. Unzip to directory #{Dir.user_home}/.rails/generators/login
+ to use the generator with all your Rails apps
+end_blurb
+
+ if Object.const_defined?(:RAILS_ROOT)
+ usage << <<end_blurb
+ or to #{File.expand_path(RAILS_ROOT)}/script/generators/login
+ to use with this app only.
+end_blurb
+ end
+
+ usage << <<end_blurb
+ 3. Run generate with no arguments for usage information
+ #{$0} login
+
+Generator gems are also available:
+ 1. gem list generator -s http://gems.rubyonrails.org
+ 2. gem install login_generator -s http://gems.rubyonrails.org
+ 3. #{$0} login
+
+end_blurb
+ return usage
+ end
+ end # Base
+
+ end
+ end
+end