Class: Homebrew::AbstractCommand Abstract Private

Inherits:
Object
  • Object
show all
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.

This class is abstract.

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::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::Rubocop, 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::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

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

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.

Parameters:



58
59
60
# File 'abstract_command.rb', line 58

def initialize(argv = ARGV.freeze)
  @args = T.let(self.class.parser.parse(argv), CLI::Args)
end

Class Attribute Details

.args_classT.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.

Returns:



24
25
26
# File 'abstract_command.rb', line 24

def args_class
  @args_class
end

Instance Attribute Details

#argsCLI::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.

Returns:



55
56
57
# File 'abstract_command.rb', line 55

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.

Parameters:

Returns:

  • (T.class_of(AbstractCommand), nil)

    the AbstractCommand subclass associated with the brew CLI command name.



37
# File 'abstract_command.rb', line 37

def command(name) = subclasses.find { _1.command_name == name }

.command_nameString

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:



27
28
29
30
31
32
33
# File 'abstract_command.rb', line 27

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.

Returns:

  • (Boolean)


40
# File 'abstract_command.rb', line 40

def dev_cmd? = T.must(name).start_with?("Homebrew::DevCmd")

.parserCLI::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.

Returns:



43
# File 'abstract_command.rb', line 43

def parser = CLI::Parser.new(self, &@parser_block)

Instance Method Details

#raise_sh_command_error!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.

Raises:

  • (StandardError)


66
67
68
69
70
# File 'abstract_command.rb', line 66

def raise_sh_command_error!
  raise StandardError,
        "This command is just here for completions generation. " \
        "It's actually defined in `cmd/#{self.class.command_name}.sh` instead."
end

#runvoid

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 is abstract.

This method returns an undefined value.



63
# File 'abstract_command.rb', line 63

def run; end