mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
refactor CommandsTasks
Extract a common method of `Rails::CommandsTasks` and `Rails::Engine::CommandsTasks` to the module.
This commit is contained in:
parent
a1e4c197cb
commit
6e95682b14
4 changed files with 139 additions and 171 deletions
|
@ -1,4 +1,6 @@
|
|||
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 @@ EOT
|
|||
'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 @@ EOT
|
|||
end
|
||||
end
|
||||
|
||||
def test
|
||||
require_command!("test")
|
||||
end
|
||||
|
||||
def dbconsole
|
||||
require_command!("dbconsole")
|
||||
Rails::DBConsole.start
|
||||
|
@ -112,16 +73,6 @@ EOT
|
|||
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 @@ EOT
|
|||
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 @@ EOT
|
|||
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
|
||||
def load_tasks
|
||||
Rails.application.load_tasks
|
||||
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
|
||||
def load_generators
|
||||
Rails.application.load_generators
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
68
railties/lib/rails/commands/common_commands_tasks.rb
Normal file
68
railties/lib/rails/commands/common_commands_tasks.rb
Normal file
|
@ -0,0 +1,68 @@
|
|||
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 @@ module Rails
|
|||
|
||||
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
|
||||
|
||||
|
|
|
@ -1,118 +1,62 @@
|
|||
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)
|
||||
|
||||
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(formatted_rake_tasks)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def require_command!(command)
|
||||
require "rails/commands/#{command}"
|
||||
def commands
|
||||
formatted_rake_tasks
|
||||
end
|
||||
|
||||
def generate_or_destroy(command)
|
||||
load_generators
|
||||
require_command!(command)
|
||||
def command_whitelist
|
||||
%w(generate destroy version help test)
|
||||
end
|
||||
|
||||
def help_message
|
||||
<<-EOT.strip_heredoc
|
||||
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
|
||||
end
|
||||
|
||||
def require_application_and_environment!
|
||||
require ENGINE_PATH
|
||||
end
|
||||
|
||||
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
|
||||
|
|
Loading…
Reference in a new issue