Class: Homebrew::AbstractCommand Abstract

Inherits:
Object
  • Object
show all
Extended by:
T::Helpers
Defined in:
abstract_command.rb

Overview

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

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:



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_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:



27
28
29
# File 'abstract_command.rb', line 27

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:



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.

Parameters:

Returns:

  • (T.class_of(AbstractCommand), nil)

    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_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:



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.

Returns:

  • (Boolean)


43
# File 'abstract_command.rb', line 43

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:



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.

Returns:

  • (Boolean)


46
# File 'abstract_command.rb', line 46

def ruby_cmd? = !include?(Homebrew::ShellCommand)

Instance Method Details

#runvoid

This method is abstract.

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