Class: Rails::Command::Base

Inherits:
Thor
  • Object
show all
Includes:
Actions
Defined in:
lib/rails/command/base.rb

Defined Under Namespace

Classes: Error

Class Method Summary collapse

Methods included from Actions

#boot_application!, #load_environment_config!, #load_generators, #load_tasks, #require_application!, #set_application_directory!

Class Method Details



84
85
86
87
88
89
90
91
92
93
# File 'lib/rails/command/base.rb', line 84

def banner(command = nil, *)
  if command
    # Similar to Thor's banner, but show the namespace (minus the
    # "rails:" prefix), and show the command's declared bin instead of
    # the command runner.
    command.formatted_usage(self).gsub(/^#{namespace}:(\w+)/) { executable($1) }
  else
    executable
  end
end

.base_nameObject

Sets the base_name taking into account the current class namespace.

Rails::Command::TestCommand.base_name # => 'rails'


104
105
106
107
108
# File 'lib/rails/command/base.rb', line 104

def base_name
  @base_name ||= if base = name.to_s.split("::").first
    base.underscore
  end
end

.class_usageObject

:nodoc:



120
121
122
123
124
# File 'lib/rails/command/base.rb', line 120

def class_usage # :nodoc:
  if usage_path
    @class_usage ||= ERB.new(File.read(usage_path), trim_mode: "-").result(binding)
  end
end

.command_nameObject

Return command name without namespaces.

Rails::Command::TestCommand.command_name # => 'test'


113
114
115
116
117
118
# File 'lib/rails/command/base.rb', line 113

def command_name
  @command_name ||= if command = name.to_s.split("::").last
    command.chomp!("Command")
    command.underscore
  end
end

.default_command_rootObject

Default file root to place extra files a command might need, placed one folder above the command file.

For a Rails::Command::TestCommand placed in rails/command/test_command.rb would return rails/test.



137
138
139
140
# File 'lib/rails/command/base.rb', line 137

def default_command_root
  @default_command_root = resolve_path(".") unless defined?(@default_command_root)
  @default_command_root
end

.desc(usage = nil, description = nil, options = {}) ⇒ Object

Tries to get the description from a USAGE file one folder above the command root.



32
33
34
35
36
37
38
# File 'lib/rails/command/base.rb', line 32

def desc(usage = nil, description = nil, options = {})
  if usage
    super
  else
    class_usage
  end
end

.engine?Boolean

Returns true when the app is a Rails engine.

Returns:

  • (Boolean)


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

def engine?
  defined?(ENGINE_ROOT)
end

.executable(command_name = self.command_name) ⇒ Object



80
81
82
# File 'lib/rails/command/base.rb', line 80

def executable(command_name = self.command_name)
  "#{bin} #{namespaced_name(command_name)}"
end

.exit_on_failure?Boolean

:nodoc:

Returns:

  • (Boolean)


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

def exit_on_failure? # :nodoc:
  false
end

.help(shell) ⇒ Object

Override Thor’s class-level help to also show the USAGE.



96
97
98
99
# File 'lib/rails/command/base.rb', line 96

def help(shell, *) # :nodoc:
  super
  shell.say class_usage if class_usage
end

.hide_command!Object

Convenience method to hide this command from the available ones when running rails command.



53
54
55
# File 'lib/rails/command/base.rb', line 53

def hide_command!
  Rails::Command.hidden_commands << self
end

.inherited(base) ⇒ Object

:nodoc:



57
58
59
60
61
62
63
# File 'lib/rails/command/base.rb', line 57

def inherited(base) # :nodoc:
  super

  if base.name && !base.name.end_with?("Base")
    Rails::Command.subclasses << base
  end
end

.namespace(name = nil) ⇒ Object

Convenience method to get the namespace from the class name. It’s the same as Thor default except that the Command at the end of the class is removed.



43
44
45
46
47
48
49
# File 'lib/rails/command/base.rb', line 43

def namespace(name = nil)
  if name
    super
  else
    @namespace ||= super.chomp("_command").sub(/:command:/, ":")
  end
end

.perform(command, args, config) ⇒ Object

:nodoc:



65
66
67
68
69
70
71
72
# File 'lib/rails/command/base.rb', line 65

def perform(command, args, config) # :nodoc:
  if Rails::Command::HELP_MAPPINGS.include?(args.first)
    command, args = "help", [command]
    args.clear if instance_method(:help).arity.zero?
  end

  dispatch(command, args.dup, nil, config)
end

.printing_commandsObject



74
75
76
77
78
# File 'lib/rails/command/base.rb', line 74

def printing_commands
  commands.filter_map do |name, command|
    [namespaced_name(name), command.description] unless command.hidden?
  end
end

.usage_pathObject

Path to lookup a USAGE description in a file.



127
128
129
130
# File 'lib/rails/command/base.rb', line 127

def usage_path
  @usage_path = resolve_path("USAGE") unless defined?(@usage_path)
  @usage_path
end