Class: Homebrew::AbstractCommand Abstract
- Extended by:
- T::Helpers
- Defined in:
- abstract_command.rb
Overview
It cannot be directly instantiated. Subclasses must implement the abstract
methods below.
Subclass this to implement a brew
command. This is preferred to declaring a named function in the Homebrew
module, because:
- Each Command lives in an isolated namespace.
- Each Command implements a defined interface.
args
is available as an instance method and thus does not need to be passed as an argument to helper methods.- Subclasses no longer need to reference
CLI::Parser
or parse args explicitly.
To subclass, implement a run
method and provide a cmd_args
block to document the command and its allowed args.
To generate method signatures for command args, run brew typecheck --update
.
Direct Known Subclasses
Cmd::Analytics, Cmd::Autoremove, Cmd::Brew, Cmd::Cache, Cmd::Caskroom, Cmd::Casks, Cmd::Cellar, Cmd::CleanupCmd, Cmd::Command, Cmd::CommandsCmd, Cmd::CompletionsCmd, Cmd::Config, Cmd::Deps, Cmd::Desc, Cmd::Developer, Cmd::Docs, Cmd::Doctor, Cmd::Env, Cmd::FetchCmd, Cmd::Formulae, Cmd::GistLogs, Cmd::HelpCmd, Cmd::Home, Cmd::Info, Cmd::InstallCmd, Cmd::Leaves, Cmd::Link, Cmd::List, Cmd::Log, Cmd::Migrate, Cmd::Missing, Cmd::NodenvSync, Cmd::OptionsCmd, Cmd::Outdated, Cmd::Pin, Cmd::Postinstall, Cmd::Prefix, Cmd::PyenvSync, Cmd::RbenvSync, Cmd::ReadallCmd, Cmd::Reinstall, Cmd::Repository, Cmd::SearchCmd, Cmd::SetupRuby, Cmd::Shellenv, Cmd::TabCmd, Cmd::TapCmd, Cmd::TapInfo, Cmd::UninstallCmd, Cmd::UnlinkCmd, Cmd::Unpin, Cmd::Untap, Cmd::Update, Cmd::UpdateReport, Cmd::UpdateReset, Cmd::UpgradeCmd, Cmd::Uses, Cmd::VendorInstall, Cmd::Version, DevCmd::Audit, DevCmd::Bottle, DevCmd::Bump, DevCmd::BumpCaskPr, DevCmd::BumpFormulaPr, DevCmd::BumpRevision, DevCmd::BumpUnversionedCasks, DevCmd::Cat, DevCmd::Contributions, DevCmd::Create, DevCmd::Debugger, DevCmd::DetermineTestRunners, DevCmd::DispatchBuildBottle, DevCmd::Edit, DevCmd::Extract, DevCmd::FormulaCmd, DevCmd::GenerateCaskApi, DevCmd::GenerateCaskCiMatrix, DevCmd::GenerateFormulaApi, DevCmd::GenerateManCompletions, DevCmd::InstallBundlerGems, DevCmd::Irb, DevCmd::Linkage, DevCmd::LivecheckCmd, DevCmd::PrAutomerge, DevCmd::PrPublish, DevCmd::PrPull, DevCmd::PrUpload, DevCmd::Prof, DevCmd::Release, DevCmd::Rubocop, DevCmd::Ruby, DevCmd::Rubydoc, DevCmd::Sh, DevCmd::StyleCmd, DevCmd::TapNew, DevCmd::Test, DevCmd::Tests, DevCmd::Typecheck, DevCmd::Unbottled, DevCmd::Unpack, DevCmd::UpdateLicenseData, DevCmd::UpdateMaintainers, DevCmd::UpdatePythonResources, DevCmd::UpdateSponsors, DevCmd::UpdateTest, DevCmd::VendorGems
Class Attribute Summary collapse
- .args_class ⇒ T.class_of(CLI::Args)? readonly private
Instance Attribute Summary collapse
- #args ⇒ CLI::Args readonly private
Class Method Summary collapse
-
.command(name) ⇒ T.class_of(AbstractCommand)?
private
The AbstractCommand subclass associated with the brew CLI command name.
- .command_name ⇒ String private
- .dev_cmd? ⇒ Boolean private
- .parser ⇒ CLI::Parser private
- .ruby_cmd? ⇒ Boolean private
Instance Method Summary collapse
- #initialize(argv = ARGV.freeze) ⇒ void constructor private
-
#run ⇒ void
abstract
This method will be invoked when the command is run.
Constructor Details
#initialize(argv = ARGV.freeze) ⇒ void
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
67 68 69 |
# File 'abstract_command.rb', line 67 def initialize(argv = ARGV.freeze) @args = T.let(self.class.parser.parse(argv), CLI::Args) end |
Class Attribute Details
.args_class ⇒ T.class_of(CLI::Args)? (readonly)
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
27 28 29 |
# File 'abstract_command.rb', line 27 def args_class @args_class end |
Instance Attribute Details
#args ⇒ CLI::Args (readonly)
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
64 65 66 |
# File 'abstract_command.rb', line 64 def args @args end |
Class Method Details
.command(name) ⇒ T.class_of(AbstractCommand)?
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
Returns the AbstractCommand subclass associated with the brew CLI command name.
40 |
# File 'abstract_command.rb', line 40 def command(name) = subclasses.find { _1.command_name == name } |
.command_name ⇒ String
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
30 31 32 33 34 35 36 |
# File 'abstract_command.rb', line 30 def command_name require "utils" Utils.underscore(T.must(name).split("::").fetch(-1)) .tr("_", "-") .delete_suffix("-cmd") end |
.dev_cmd? ⇒ Boolean
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
43 |
# File 'abstract_command.rb', line 43 def dev_cmd? = T.must(name).start_with?("Homebrew::DevCmd") |
.parser ⇒ CLI::Parser
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
49 |
# File 'abstract_command.rb', line 49 def parser = CLI::Parser.new(self, &@parser_block) |
.ruby_cmd? ⇒ Boolean
This method is part of a private API. This method may only be used in the Homebrew/brew repository. Third parties should avoid using this method if possible, as it may be removed or changed without warning.
46 |
# File 'abstract_command.rb', line 46 def ruby_cmd? = !include?(Homebrew::ShellCommand) |
Instance Method Details
#run ⇒ void
This method returns an undefined value.
This method will be invoked when the command is run.
75 |
# File 'abstract_command.rb', line 75 def run; end |