Module: Rails::Command

Extended by:
ActiveSupport::Autoload
Includes:
Behavior
Defined in:
lib/rails/command.rb,
lib/rails/command/base.rb,
lib/rails/command/actions.rb,
lib/rails/command/behavior.rb,
lib/rails/command/helpers/editor.rb,
lib/rails/commands/dev/dev_command.rb,
lib/rails/commands/new/new_command.rb,
lib/rails/commands/help/help_command.rb,
lib/rails/commands/rake/rake_command.rb,
lib/rails/commands/test/test_command.rb,
lib/rails/command/environment_argument.rb,
lib/rails/commands/notes/notes_command.rb,
lib/rails/commands/plugin/plugin_command.rb,
lib/rails/commands/routes/routes_command.rb,
lib/rails/commands/runner/runner_command.rb,
lib/rails/commands/server/server_command.rb,
lib/rails/commands/console/console_command.rb,
lib/rails/commands/destroy/destroy_command.rb,
lib/rails/commands/secrets/secrets_command.rb,
lib/rails/commands/version/version_command.rb,
lib/rails/commands/generate/generate_command.rb,
lib/rails/commands/dbconsole/dbconsole_command.rb,
lib/rails/commands/encrypted/encrypted_command.rb,
lib/rails/commands/application/application_command.rb,
lib/rails/commands/credentials/credentials_command.rb,
lib/rails/commands/db/system/change/change_command.rb,
lib/rails/commands/initializers/initializers_command.rb

Defined Under Namespace

Modules: Actions, Behavior, Db, EnvironmentArgument, Helpers Classes: ApplicationCommand, Base, ConsoleCommand, CredentialsCommand, DbconsoleCommand, DestroyCommand, DevCommand, EncryptedCommand, GenerateCommand, HelpCommand, InitializersCommand, NewCommand, NotesCommand, PluginCommand, RakeCommand, RoutesCommand, RunnerCommand, SecretsCommand, ServerCommand, TestCommand, VersionCommand

Constant Summary collapse

HELP_MAPPINGS =
%w(-h -? --help)

Class Method Summary collapse

Class Method Details

.environmentObject

:nodoc:



25
26
27
# File 'lib/rails/command.rb', line 25

def environment # :nodoc:
  ENV["RAILS_ENV"].presence || ENV["RACK_ENV"].presence || "development"
end

.find_by_namespace(namespace, command_name = nil) ⇒ Object

Rails finds namespaces similar to Thor, it only adds one rule:

Command names must end with “_command.rb”. This is required because Rails looks in load paths and loads the command just before it’s going to be used.

find_by_namespace :webrat, :integration

Will search for the following commands:

"webrat", "webrat:integration", "rails:webrat", "rails:webrat:integration"


68
69
70
71
72
73
74
75
76
77
# File 'lib/rails/command.rb', line 68

def find_by_namespace(namespace, command_name = nil) # :nodoc:
  lookups = [ namespace ]
  lookups << "#{namespace}:#{command_name}" if command_name
  lookups.concat lookups.map { |lookup| "rails:#{lookup}" }

  lookup(lookups)

  namespaces = subclasses.index_by(&:namespace)
  namespaces[(lookups & namespaces.keys).first]
end

.hidden_commandsObject

:nodoc:



21
22
23
# File 'lib/rails/command.rb', line 21

def hidden_commands # :nodoc:
  @hidden_commands ||= []
end

.invoke(full_namespace, args = [], **config) ⇒ Object

Receives a namespace, arguments, and the behavior to invoke the command.



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'lib/rails/command.rb', line 30

def invoke(full_namespace, args = [], **config)
  namespace = full_namespace = full_namespace.to_s

  if char = namespace =~ /:(\w+)$/
    command_name, namespace = $1, namespace.slice(0, char)
  else
    command_name = namespace
  end

  command_name, namespace = "help", "help" if command_name.blank? || HELP_MAPPINGS.include?(command_name)
  command_name, namespace, args = "application", "application", ["--help"] if rails_new_with_no_path?(args)
  command_name, namespace = "version", "version" if %w( -v --version ).include?(command_name)

  original_argv = ARGV.dup
  ARGV.replace(args)

  command = find_by_namespace(namespace, command_name)
  if command && command.all_commands[command_name]
    command.perform(command_name, args, config)
  else
    args = ["--describe", full_namespace] if HELP_MAPPINGS.include?(args[0])
    find_by_namespace("rake").perform(full_namespace, args, config)
  end
ensure
  ARGV.replace(original_argv)
end

:nodoc:



88
89
90
# File 'lib/rails/command.rb', line 88

def print_commands # :nodoc:
  commands.each { |command| puts("  #{command}") }
end

.rootObject

Returns the root of the Rails engine or app running the command.



80
81
82
83
84
85
86
# File 'lib/rails/command.rb', line 80

def root
  if defined?(ENGINE_ROOT)
    Pathname.new(ENGINE_ROOT)
  elsif defined?(APP_PATH)
    Pathname.new(File.expand_path("../..", APP_PATH))
  end
end