diff --git a/railties/bin/gen b/railties/bin/gen index 9f105d2e196cadd79fee5df3a1c7d78850795181..809e75acb5c45f70eab7a45647a0f94dd9686ed2 100755 --- a/railties/bin/gen +++ b/railties/bin/gen @@ -10,33 +10,9 @@ end require File.dirname(__FILE__) + '/../lib/generators' if ARGV.size == 0 - rails = Rails::Generators.builtin.map do |group, name| - name if group == "rails" - end - rails.compact! - rails.sort! - - others = Rails::Generators.builtin.map do |group, name| - "#{group}:#{name}" unless rails.include?(name) - end.compact - others.sort! - - puts "Please select a generator." - puts "Builtin: #{rails.join(', ')}." - puts "Others: #{others.join(', ')}." unless others.empty? - + Rails::Generators.help exit end -Rails::Generators.builtin.each do |group, name| - require "generators/#{group}/#{name}/#{name}_generator" -end - name = ARGV.shift - -if klass = Rails::Generators.find_by_namespace(name, "rails") - ARGV << "--help" if klass.arguments.any? { |a| a.required? } && ARGV.empty? - klass.start -else - puts "Could not find generator #{name}." -end +Rails::Generators.invoke name, ARGV, :invoke diff --git a/railties/lib/commands/destroy.rb b/railties/lib/commands/destroy.rb index f4b81d65117f049c4110a4092e30463c17ffd167..204477b7388607d4cc87fb65f694e4dc6ac57352 100644 --- a/railties/lib/commands/destroy.rb +++ b/railties/lib/commands/destroy.rb @@ -1,6 +1,10 @@ require "#{RAILS_ROOT}/config/environment" -require 'rails_generator' -require 'rails_generator/scripts/destroy' +require 'generators' -ARGV.shift if ['--help', '-h'].include?(ARGV[0]) -Rails::Generator::Scripts::Destroy.new.run(ARGV) +if ARGV.size == 0 + Rails::Generators.help + exit +end + +name = ARGV.shift +Rails::Generators.invoke name, ARGV, :revoke diff --git a/railties/lib/commands/generate.rb b/railties/lib/commands/generate.rb index 3d3db3d8565eed337aedb2da522153f160d399af..7d133a179e9d08da0cd70369d50f3aeb4c914463 100755 --- a/railties/lib/commands/generate.rb +++ b/railties/lib/commands/generate.rb @@ -1,6 +1,10 @@ require "#{RAILS_ROOT}/config/environment" -require 'rails_generator' -require 'rails_generator/scripts/generate' +require 'generators' -ARGV.shift if ['--help', '-h'].include?(ARGV[0]) -Rails::Generator::Scripts::Generate.new.run(ARGV) +if ARGV.size == 0 + Rails::Generators.help + exit +end + +name = ARGV.shift +Rails::Generators.invoke name, ARGV, :invoke diff --git a/railties/lib/commands/update.rb b/railties/lib/commands/update.rb index 83ef833300ad561c1dd7eef68796307dcc481e0d..0c14355f248c503477c166725c8754f9179b8f6f 100644 --- a/railties/lib/commands/update.rb +++ b/railties/lib/commands/update.rb @@ -1,4 +1,10 @@ require "#{RAILS_ROOT}/config/environment" -require 'rails_generator' -require 'rails_generator/scripts/update' -Rails::Generator::Scripts::Update.new.run(ARGV) +require 'generators' + +if ARGV.size == 0 + Rails::Generators.help + exit +end + +name = ARGV.shift +Rails::Generators.invoke name, ARGV, :skip diff --git a/railties/lib/generators.rb b/railties/lib/generators.rb index fd7d3c958045099a2e05587c5436bb9735dd3d66..8814f6e8003d09c36101f669ef5f260172f286a0 100644 --- a/railties/lib/generators.rb +++ b/railties/lib/generators.rb @@ -25,7 +25,7 @@ def self.builtin # # ==== Examples # - # lookup_by_namespace :webrat, :rails, :integration + # find_by_namespace :webrat, :rails, :integration # # Will search for the following generators: # @@ -36,7 +36,7 @@ def self.builtin # # Finally, it deals with one kind of shortcut: # - # lookup_by_namespace "test_unit:model" + # find_by_namespace "test_unit:model" # # It will search for generators at: # @@ -51,12 +51,46 @@ def self.find_by_namespace(name, base=nil, context=nil) attempts << name attempts.each do |namespace| - klass, task = Thor::Util.find_by_namespace(namespace) + klass = Thor::Util.find_by_namespace(namespace) return klass if klass end nil end + + # Show help message with available generators. + # + def self.help + rails = Rails::Generators.builtin.map do |group, name| + name if group == "rails" + end + rails.compact! + rails.sort! + + puts "Please select a generator." + puts "Builtin: #{rails.join(', ')}." + + # TODO Show others after lookup is implemented + # puts "Others: #{others.join(', ')}." + end + + # Receives a namespace, arguments and the behavior to invoke the generator. + # It's used as the default entry point for generate, destroy and update + # commands. + # + def self.invoke(namespace, args=ARGV, behavior=:invoke) + # Load everything right now ... + builtin.each do |group, name| + require "generators/#{group}/#{name}/#{name}_generator" + end + + if klass = find_by_namespace(namespace, "rails") + args << "--help" if klass.arguments.any? { |a| a.required? } && args.empty? + klass.start args, :behavior => behavior + else + puts "Could not find generator #{namespace}." + end + end end end