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/spellchecker.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, Spellchecker 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:



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

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, :rails, :integration

Will search for the following commands:

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

Notice that “rails:commands:webrat” could be loaded as well, what Rails looks for is the first and last parts of the namespace.



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

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:



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

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

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

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



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

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 = "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
    find_by_namespace("rake").perform(full_namespace, args, config)
  end
ensure
  ARGV.replace(original_argv)
end

:nodoc:



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

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

.rootObject

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



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

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