提交 5fe02881 编写于 作者: R Rafael França 提交者: GitHub

Merge pull request #26185 from y-yagi/refactor_commands_tasks

refactor `CommandsTasks`
require "rails/commands/rake_proxy"
require "rails/commands/common_commands_tasks"
require "active_support/core_ext/string/strip"
module Rails
# This is a class which takes in a rails command and initiates the appropriate
......@@ -8,27 +10,10 @@ module Rails
# it before they are run.
class CommandsTasks # :nodoc:
include Rails::RakeProxy
include Rails::CommonCommandsTasks
attr_reader :argv
HELP_MESSAGE = <<-EOT
Usage: rails COMMAND [ARGS]
The most common rails commands are:
generate Generate new code (short-cut alias: "g")
console Start the Rails console (short-cut alias: "c")
server Start the Rails server (short-cut alias: "s")
test Run tests (short-cut alias: "t")
dbconsole Start a console for the database specified in config/database.yml
(short-cut alias: "db")
new Create a new Rails application. "rails new my_app" creates a
new application called MyApp in "./my_app"
All commands can be run with -h (or --help) for more information.
In addition to those commands, there are:
EOT
ADDITIONAL_COMMANDS = [
[ "destroy", 'Undo code generated with "generate" (short-cut alias: "d")' ],
[ "plugin new", "Generates skeleton for developing a Rails plugin" ],
......@@ -36,34 +21,14 @@ class CommandsTasks # :nodoc:
'Run a piece of code in the application environment (short-cut alias: "r")' ]
]
COMMAND_WHITELIST = %w(plugin generate destroy console server dbconsole runner new version help test)
def initialize(argv)
@argv = argv
end
def run_command!(command)
command = parse_command(command)
if COMMAND_WHITELIST.include?(command)
send(command)
else
run_rake_task(command)
end
end
def plugin
require_command!("plugin")
end
def generate
generate_or_destroy(:generate)
end
def destroy
generate_or_destroy(:destroy)
end
def console
require_command!("console")
options = Rails::Console.parse_arguments(argv)
......@@ -91,10 +56,6 @@ def server
end
end
def test
require_command!("test")
end
def dbconsole
require_command!("dbconsole")
Rails::DBConsole.start
......@@ -112,16 +73,6 @@ def new
end
end
def version
argv.unshift "--version"
require_command!("application")
end
def help
write_help_message
write_commands ADDITIONAL_COMMANDS + formatted_rake_tasks
end
private
def exit_with_initialization_warning!
......@@ -134,17 +85,6 @@ def shift_argv!
argv.shift if argv.first && argv.first[0] != "-"
end
def require_command!(command)
require "rails/commands/#{command}"
end
def generate_or_destroy(command)
require "rails/generators"
require_application_and_environment!
Rails.application.load_generators
require_command!(command)
end
# Change to the application's path if there is no config.ru file in current directory.
# This allows us to run `rails server` from other directories, but still get
# the main config.ru and properly set the tmp directory.
......@@ -152,29 +92,45 @@ def set_application_directory!
Dir.chdir(File.expand_path("../../", APP_PATH)) unless File.exist?(File.expand_path("config.ru"))
end
def commands
ADDITIONAL_COMMANDS + formatted_rake_tasks
end
def command_whitelist
%w(plugin generate destroy console server dbconsole runner new version help test)
end
def help_message
<<-EOT.strip_heredoc
Usage: rails COMMAND [ARGS]
The most common rails commands are:
generate Generate new code (short-cut alias: "g")
console Start the Rails console (short-cut alias: "c")
server Start the Rails server (short-cut alias: "s")
test Run tests (short-cut alias: "t")
dbconsole Start a console for the database specified in config/database.yml
(short-cut alias: "db")
new Create a new Rails application. "rails new my_app" creates a
new application called MyApp in "./my_app"
All commands can be run with -h (or --help) for more information.
In addition to those commands, there are:
EOT
end
def require_application_and_environment!
require APP_PATH
Rails.application.require_environment!
end
def write_help_message
puts HELP_MESSAGE
end
def write_commands(commands)
width = commands.map { |name, _| name.size }.max || 10
commands.each { |command| printf(" %-#{width}s %s\n", *command) }
def load_tasks
Rails.application.load_tasks
end
def parse_command(command)
case command
when "--version", "-v"
"version"
when "--help", "-h"
"help"
else
command
end
def load_generators
Rails.application.load_generators
end
end
end
module Rails
module CommonCommandsTasks # :nodoc:
def run_command!(command)
command = parse_command(command)
if command_whitelist.include?(command)
send(command)
else
run_rake_task(command)
end
end
def generate
generate_or_destroy(:generate)
end
def destroy
generate_or_destroy(:destroy)
end
def test
require_command!("test")
end
def version
argv.unshift "--version"
require_command!("application")
end
def help
write_help_message
write_commands(commands)
end
private
def generate_or_destroy(command)
require "rails/generators"
require_application_and_environment!
load_generators
require_command!(command)
end
def require_command!(command)
require "rails/commands/#{command}"
end
def write_help_message
puts help_message
end
def write_commands(commands)
width = commands.map { |name, _| name.size }.max || 10
commands.each { |command| printf(" %-#{width}s %s\n", *command) }
end
def parse_command(command)
case command
when "--version", "-v"
"version"
when "--help", "-h"
"help"
else
command
end
end
end
end
......@@ -26,7 +26,7 @@ def rake_tasks
Rake::TaskManager.record_task_metadata = true
Rake.application.instance_variable_set(:@name, "rails")
Rails.application.load_tasks
load_tasks
@rake_tasks = Rake.application.tasks.select(&:comment)
end
......
require "rails/commands/rake_proxy"
require "rails/commands/common_commands_tasks"
require "active_support/core_ext/string/strip"
module Rails
class Engine
class CommandsTasks # :nodoc:
include Rails::RakeProxy
include Rails::CommonCommandsTasks
attr_reader :argv
HELP_MESSAGE = <<-EOT
Usage: rails COMMAND [ARGS]
The common Rails commands available for engines are:
generate Generate new code (short-cut alias: "g")
destroy Undo code generated with "generate" (short-cut alias: "d")
test Run tests (short-cut alias: "t")
All commands can be run with -h for more information.
If you want to run any commands that need to be run in context
of the application, like `rails server` or `rails console`,
you should do it from application's directory (typically test/dummy).
In addition to those commands, there are:
EOT
COMMAND_WHITELIST = %w(generate destroy version help test)
def initialize(argv)
@argv = argv
end
def run_command!(command)
command = parse_command(command)
private
if COMMAND_WHITELIST.include?(command)
send(command)
else
run_rake_task(command)
def commands
formatted_rake_tasks
end
end
def generate
generate_or_destroy(:generate)
end
def command_whitelist
%w(generate destroy version help test)
end
def destroy
generate_or_destroy(:destroy)
end
def help_message
<<-EOT.strip_heredoc
Usage: rails COMMAND [ARGS]
def test
require_command!("test")
end
The common Rails commands available for engines are:
generate Generate new code (short-cut alias: "g")
destroy Undo code generated with "generate" (short-cut alias: "d")
test Run tests (short-cut alias: "t")
def version
argv.unshift "--version"
require_command!("application")
end
All commands can be run with -h for more information.
def help
write_help_message
write_commands(formatted_rake_tasks)
end
If you want to run any commands that need to be run in context
of the application, like `rails server` or `rails console`,
you should do it from application's directory (typically test/dummy).
private
In addition to those commands, there are:
EOT
end
def require_command!(command)
require "rails/commands/#{command}"
def require_application_and_environment!
require ENGINE_PATH
end
def generate_or_destroy(command)
load_generators
require_command!(command)
def load_tasks
Rake.application.init("rails")
Rake.application.load_rakefile
end
def load_generators
require "rails/generators"
require ENGINE_PATH
engine = ::Rails::Engine.find(ENGINE_ROOT)
Rails::Generators.namespace = engine.railtie_namespace
engine.load_generators
end
def write_help_message
puts HELP_MESSAGE
end
def write_commands(commands)
width = commands.map { |name, _| name.size }.max || 10
commands.each { |command| printf(" %-#{width}s %s\n", *command) }
end
def parse_command(command)
case command
when "--version", "-v"
"version"
when "--help", "-h"
"help"
else
command
end
end
def rake_tasks
require_rake
return @rake_tasks if defined?(@rake_tasks)
load_generators
Rake::TaskManager.record_task_metadata = true
Rake.application.init("rails")
Rake.application.load_rakefile
@rake_tasks = Rake.application.tasks.select(&:comment)
end
end
end
end
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册