Class: Homebrew::AbstractCommand Abstract Private
- Extended by:
- T::Helpers
- Defined in:
- abstract_command.rb
Overview
This class is part of a private API. This class may only be used in the Homebrew/brew repository. Third parties should avoid using this class if possible, as it may be removed or changed without warning.
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::Cache, Cmd::Caskroom, 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::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::PostgresqlUpgradeDatabase, Cmd::Postinstall, Cmd::Prefix, Cmd::PyenvSync, Cmd::RbenvSync, Cmd::ReadallCmd, Cmd::Reinstall, Cmd::Repository, Cmd::SearchCmd, Cmd::TapCmd, Cmd::TapInfo, Cmd::UninstallCmd, Cmd::UnlinkCmd, Cmd::Unpin, Cmd::Untap, Cmd::UpdateReport, Cmd::UpgradeCmd, Cmd::Uses, DevCmd::Audit, DevCmd::Bottle, DevCmd::Bump, DevCmd::BumpCaskPr, DevCmd::BumpFormulaPr, DevCmd::BumpRevision, DevCmd::BumpUnversionedCasks, DevCmd::Cat, DevCmd::Contributions, DevCmd::Create, DevCmd::DetermineTestRunners, DevCmd::DispatchBuildBottle, DevCmd::Edit, DevCmd::Extract, DevCmd::FormulaCmd, DevCmd::GenerateCaskApi, 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::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
Instance Method Summary collapse
- #initialize(argv = ARGV.freeze) ⇒ void constructor private
- #run ⇒ void abstract private
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.
52 53 54 |
# File 'abstract_command.rb', line 52 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.
24 25 26 |
# File 'abstract_command.rb', line 24 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.
49 50 51 |
# File 'abstract_command.rb', line 49 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.
31 |
# File 'abstract_command.rb', line 31 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.
27 |
# File 'abstract_command.rb', line 27 def command_name = Utils.underscore(T.must(name).split("::").fetch(-1)).tr("_", "-").delete_suffix("-cmd") |
.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.
34 |
# File 'abstract_command.rb', line 34 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.
37 |
# File 'abstract_command.rb', line 37 def parser = CLI::Parser.new(self, &@parser_block) |
Instance Method Details
#run ⇒ 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.
This method returns an undefined value.
57 |
# File 'abstract_command.rb', line 57 def run; end |