Class: Brut::CLI::Commands::BaseCommand
- Inherits:
-
Object
- Object
- Brut::CLI::Commands::BaseCommand
- Defined in:
- lib/brut/cli/commands/base_command.rb
Direct Known Subclasses
Apps::BuildAssets, Apps::BuildAssets::BaseCommand, Apps::DB, Apps::DB::Create, Apps::DB::Drop, Apps::DB::Migrate, Apps::DB::NewMigration, Apps::DB::Seed, Apps::DB::Status, Apps::Deploy, Apps::Deploy::Build, Apps::Deploy::Build::Docker, Apps::Deploy::Check, Apps::Deploy::Check::Git, Apps::Deploy::Heroku, Apps::New::App, Apps::New::App::Segment, Apps::Scaffold, Apps::Scaffold::BaseCommand, Apps::Test, Apps::Test::Audit, Apps::Test::Js, Apps::Test::Run, CompoundCommand, Help, HelpInMarkdown, OutputError, RaiseError
Instance Attribute Summary collapse
-
#parent_command ⇒ Object
Returns the value of attribute parent_command.
Instance Method Summary collapse
-
#accepts ⇒ Array<Array>|Array<Class>
Specify type conversions for options.
-
#args_description ⇒ String
Description of the arguments this command accepts.
-
#argv ⇒ Array<String>
Access the command line arguments leftover after all options have been parsed, when ‘.execute` was called.
-
#bootstrap? ⇒ true|false
True if the command requires Brut to fully bootstrap and start itself up.
-
#commands ⇒ Array<Brut::CLI::Commands::BaseCommand>
Returns a list of commands that represent the subcommands available to this command.
-
#default_rack_env ⇒ String|nil
The default ‘RACK_ENV` to use for this command.
-
#delegate_to_command(command, execution_context = :use_ivar) ⇒ Object
Delegates control to another command.
-
#description ⇒ String
Description of this command for use in help output.
-
#detailed_description ⇒ Object
Returns a more detaile description of the command.
-
#env ⇒ Object
Convienience methods to defer to ‘Brut::CLI::Commands::ExecutionContext#env`.
-
#env_vars ⇒ Array<Array<String>>
Array of arrays documenting which environment variables affect this command’s behavior.
-
#execute(execution_context) ⇒ Object
Execute the command in the given context.
-
#name ⇒ String
The name of the command that the developer should use on the command line.
-
#options ⇒ Object
Convienience methods to defer to ‘Brut::CLI::Commands::ExecutionContext#options`.
-
#opts ⇒ Array<Array<Object>>
Used to specify the command line options for the command.
-
#puts(*args) ⇒ Object
Convienience methods to defer to ‘Brut::CLI::Commands::ExecutionContext#stdout`’s ‘puts`.
-
#run ⇒ Integer|Object|StandardError
Runs whatever logic this command exists to execute.
-
#stdin ⇒ Object
Convienience methods to defer to ‘Brut::CLI::Commands::ExecutionContext#stdin`.
-
#system!(*args, &block) ⇒ Object
Convienience methods to defer to ‘Brut::CLI::Commands::ExecutionContext`’s ‘Brut::CLI::Executor#system!`.
- #theme ⇒ Object
Instance Attribute Details
#parent_command ⇒ Object
Returns the value of attribute parent_command.
4 5 6 |
# File 'lib/brut/cli/commands/base_command.rb', line 4 def parent_command @parent_command end |
Instance Method Details
#accepts ⇒ Array<Array>|Array<Class>
Specify type conversions for options. This is a loose wrapper around ‘OptionParser#accept` with a convienience feature to allow simpler conversions without a proc.
106 |
# File 'lib/brut/cli/commands/base_command.rb', line 106 def accepts = [] |
#args_description ⇒ String
Returns description of the arguments this command accepts. Used for documentation only.
64 |
# File 'lib/brut/cli/commands/base_command.rb', line 64 def args_description = nil |
#argv ⇒ Array<String>
Access the command line arguments leftover after all options have been parsed, when ‘.execute` was called
137 |
# File 'lib/brut/cli/commands/base_command.rb', line 137 def argv = self.execution_context.argv |
#bootstrap? ⇒ true|false
True if the command requires Brut to fully bootstrap and start itself up. Bootstrapping isn’t running a web server but it will do everything else, including connecting too all databases. Your command should return true for this if it needs to access a database or make API calls outside ‘Brut::CLI`. If this returns false, Brut’s configuration options will still be available.
By default, this returns false
46 |
# File 'lib/brut/cli/commands/base_command.rb', line 46 def bootstrap? = false |
#commands ⇒ Array<Brut::CLI::Commands::BaseCommand>
Returns a list of commands that represent the subcommands available to this command. By default, this will return all commands that are inner classes of this command.
112 113 114 115 116 117 118 |
# File 'lib/brut/cli/commands/base_command.rb', line 112 def commands self.class.constants.map { |name| self.class.const_get(name) }.select { |constant| constant.kind_of?(Class) && constant.ancestors.include?(Brut::CLI::Commands::BaseCommand) }.map(&:new) end |
#default_rack_env ⇒ String|nil
The default ‘RACK_ENV` to use for this command. This value is used when no `RACK_ENV` is present in the UNIX environment and when `–env` has not been used on the command line. Do note that setting this in an app or parent command does not translate to the subcommands.
54 |
# File 'lib/brut/cli/commands/base_command.rb', line 54 def default_rack_env = nil |
#delegate_to_command(command, execution_context = :use_ivar) ⇒ Object
Delegates control to another command. This is most useful for aliasing one command to another. If you want to run another command as part of yoru command, you can use this, however you must use ‘Brut::CLI::ExecuteResult` to examine the return value, so you know if the command succeeded or not.
26 27 28 29 30 31 32 33 34 35 36 |
# File 'lib/brut/cli/commands/base_command.rb', line 26 def delegate_to_command(command,execution_context=:use_ivar) execution_context = if execution_context == :use_ivar @execution_context else execution_context end if execution_context.nil? raise ArgumentError, "No execution context provided and none set on this command" end command.execute(execution_context) end |
#description ⇒ String
Returns description of this command for use in help output.
57 |
# File 'lib/brut/cli/commands/base_command.rb', line 57 def description = "" |
#detailed_description ⇒ Object
Returns a more detaile description of the command. This can includes paragraphs which will be maintained, however any additional formatting is not rendered or used.
61 |
# File 'lib/brut/cli/commands/base_command.rb', line 61 def detailed_description = nil |
#env ⇒ Object
Convienience methods to defer to ‘Brut::CLI::Commands::ExecutionContext#env`. You should use this over `ENV`.
189 |
# File 'lib/brut/cli/commands/base_command.rb', line 189 def env = self.execution_context.env |
#env_vars ⇒ Array<Array<String>>
Returns Array of arrays documenting which environment variables affect this command’s behavior. The array should have two elements: the env var name as a string, and a string documenting its purpose. This is used for documentation only.
69 |
# File 'lib/brut/cli/commands/base_command.rb', line 69 def env_vars = [] |
#execute(execution_context) ⇒ Object
Execute the command in the given context. This is the method to call to execute a command programmatically, however you should not override this method. Instead, override ‘.run` to provide your command’s logic.
to standard streams, the parsed options, and unparsed arguments.
17 18 19 20 |
# File 'lib/brut/cli/commands/base_command.rb', line 17 def execute(execution_context) @execution_context = execution_context self.run end |
#name ⇒ String
The name of the command that the developer should use on the command line. By default, this is the underscorized version of the class’ simple name.
10 |
# File 'lib/brut/cli/commands/base_command.rb', line 10 def name = RichString.new(self.class.name.split(/::/).last).underscorized |
#options ⇒ Object
Convienience methods to defer to ‘Brut::CLI::Commands::ExecutionContext#options`.
186 187 188 |
# File 'lib/brut/cli/commands/base_command.rb', line 186 def = self.execution_context. # Convienience methods to defer to `Brut::CLI::Commands::ExecutionContext#env`. You should use this over `ENV`. # @!visibility public |
#opts ⇒ Array<Array<Object>>
Used to specify the command line options for the command.
75 |
# File 'lib/brut/cli/commands/base_command.rb', line 75 def opts = [] |
#puts(*args) ⇒ Object
Convienience methods to defer to ‘Brut::CLI::Commands::ExecutionContext#stdout`’s ‘puts`.
160 161 162 163 164 |
# File 'lib/brut/cli/commands/base_command.rb', line 160 def puts(*args) if !.quiet? self.execution_context.stdout.puts(*args) end end |
#run ⇒ Integer|Object|StandardError
Runs whatever logic this command exists to execute. This is the method you must implement, however ‘#execute` is the public API and what you should call if you want to programmatically execute a command.
The default implementation will generate an error, which is suitable for an app or namespace command that require a subcommand.
205 206 207 208 209 210 211 212 213 |
# File 'lib/brut/cli/commands/base_command.rb', line 205 def run if argv[0] puts theme.error.render("No such command '#{argv[0]}'") return 1 end puts theme.error.render("Command is required") 1 end |
#stdin ⇒ Object
Convienience methods to defer to ‘Brut::CLI::Commands::ExecutionContext#stdin`. You should use this over `STDIN` of `$stdin`.
183 184 185 |
# File 'lib/brut/cli/commands/base_command.rb', line 183 def stdin = self.execution_context.stdin # Convienience methods to defer to `Brut::CLI::Commands::ExecutionContext#options`. # @!visibility public |
#system!(*args, &block) ⇒ Object
Convienience methods to defer to ‘Brut::CLI::Commands::ExecutionContext`’s ‘Brut::CLI::Executor#system!`.
141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 |
# File 'lib/brut/cli/commands/base_command.rb', line 141 def system!(*args,&block) output = "" block ||= ->(output_chunk) { output << output_chunk } begin self.execution_context.executor.system!(*args,&block) ensure if output.length > 0 progname = args.detect { it.kind_of?(String) }.split(" ") output.lines.each do |line| self.execution_context.logger.add(Logger::INFO, line.chomp, progname) end end end end |
#theme ⇒ Object
120 121 122 |
# File 'lib/brut/cli/commands/base_command.rb', line 120 def theme @theme = Brut::CLI::TerminalTheme.new(terminal:) end |