From 6e95682b1424e8e4320b8a5120ec31959101c138 Mon Sep 17 00:00:00 2001 From: "yuuji.yaginuma" Date: Sun, 14 Aug 2016 20:42:24 +0900 Subject: refactor `CommandsTasks` Extract a common method of `Rails::CommandsTasks` and `Rails::Engine::CommandsTasks` to the module. --- railties/lib/rails/commands/commands_tasks.rb | 114 +++++++-------------- .../lib/rails/commands/common_commands_tasks.rb | 68 ++++++++++++ railties/lib/rails/commands/rake_proxy.rb | 2 +- 3 files changed, 104 insertions(+), 80 deletions(-) create mode 100644 railties/lib/rails/commands/common_commands_tasks.rb (limited to 'railties/lib/rails/commands') diff --git a/railties/lib/rails/commands/commands_tasks.rb b/railties/lib/rails/commands/commands_tasks.rb index 02f6472330..43f9dd38f3 100644 --- a/railties/lib/rails/commands/commands_tasks.rb +++ b/railties/lib/rails/commands/commands_tasks.rb @@ -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 - 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 diff --git a/railties/lib/rails/commands/common_commands_tasks.rb b/railties/lib/rails/commands/common_commands_tasks.rb new file mode 100644 index 0000000000..c1484d7ae2 --- /dev/null +++ b/railties/lib/rails/commands/common_commands_tasks.rb @@ -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 diff --git a/railties/lib/rails/commands/rake_proxy.rb b/railties/lib/rails/commands/rake_proxy.rb index b9e50f3e5a..f8da71831a 100644 --- a/railties/lib/rails/commands/rake_proxy.rb +++ b/railties/lib/rails/commands/rake_proxy.rb @@ -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 -- cgit v1.2.3