Class: Cask::Cmd::Info Private

Inherits:
AbstractCommand show all
Extended by:
T::Sig
Defined in:
cask/cmd/info.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.

Cask implementation of the brew info command.

Constant Summary

Constants inherited from AbstractCommand

AbstractCommand::OPTIONS

Instance Attribute Summary

Attributes inherited from AbstractCommand

#args

Class Method Summary collapse

Instance Method Summary collapse

Methods inherited from AbstractCommand

abstract?, command_name, help, #initialize, run, short_description, visible?

Methods included from Homebrew::Search

#query_regexp, #search_casks, #search_descriptions, #search_formulae, #search_taps

Methods included from Homebrew::Search::Extension

#search_casks, #search_descriptions

Constructor Details

This class inherits a constructor from Cask::Cmd::AbstractCommand

Class Method Details

.artifact_info(cask) ⇒ Object

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.



142
143
144
145
146
147
148
149
150
151
# File 'cask/cmd/info.rb', line 142

def self.artifact_info(cask)
  artifact_output = ohai_title("Artifacts").dup
  cask.artifacts.each do |artifact|
    next unless artifact.respond_to?(:install_phase)
    next unless DSL::ORDINARY_ARTIFACT_CLASSES.include?(artifact.class)

    artifact_output << "\n" << artifact.to_s
  end
  artifact_output.freeze
end

.desc_info(cask) ⇒ Object

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.



114
115
116
117
118
119
# File 'cask/cmd/info.rb', line 114

def self.desc_info(cask)
  <<~EOS
    #{ohai_title("Description")}
    #{cask.desc.nil? ? Formatter.error("None") : cask.desc}
  EOS
end

.formatted_url(url) ⇒ Object

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.



87
88
89
# File 'cask/cmd/info.rb', line 87

def self.formatted_url(url)
  "#{Tty.underline}#{url}#{Tty.reset}"
end

.get_info(cask) ⇒ Object

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.



58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
# File 'cask/cmd/info.rb', line 58

def self.get_info(cask)
  require "cask/installer"

  output = +"#{title_info(cask)}\n"
  output << "#{Formatter.url(cask.homepage)}\n" if cask.homepage
  output << installation_info(cask)
  repo = repo_info(cask)
  output << "#{repo}\n" if repo
  output << name_info(cask)
  output << desc_info(cask)
  language = language_info(cask)
  output << language if language
  output << "#{artifact_info(cask)}\n"
  caveats = Installer.caveats(cask)
  output << caveats if caveats
  output
end

.info(cask) ⇒ Object

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.



76
77
78
79
# File 'cask/cmd/info.rb', line 76

def self.info(cask)
  puts get_info(cask)
  ::Utils::Analytics.cask_output(cask, args: Homebrew::CLI::Args.new)
end

.installation_info(cask) ⇒ Object

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.



91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
# File 'cask/cmd/info.rb', line 91

def self.installation_info(cask)
  return "Not installed\n" unless cask.installed?

  install_info = +""
  cask.versions.each do |version|
    versioned_staged_path = cask.caskroom_path.join(version)
    path_details = if versioned_staged_path.exist?
      versioned_staged_path.abv
    else
      Formatter.error("does not exist")
    end
    install_info << "#{versioned_staged_path} (#{path_details})\n"
  end
  install_info.freeze
end

.language_info(cask) ⇒ Object

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.



121
122
123
124
125
126
127
128
# File 'cask/cmd/info.rb', line 121

def self.language_info(cask)
  return if cask.languages.empty?

  <<~EOS
    #{ohai_title("Languages")}
    #{cask.languages.join(", ")}
  EOS
end

.name_info(cask) ⇒ Object

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.



107
108
109
110
111
112
# File 'cask/cmd/info.rb', line 107

def self.name_info(cask)
  <<~EOS
    #{ohai_title((cask.name.size > 1) ? "Names" : "Name")}
    #{cask.name.empty? ? Formatter.error("None") : cask.name.join("\n")}
  EOS
end

.parserObject

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.



14
15
16
17
18
19
20
21
# File 'cask/cmd/info.rb', line 14

def self.parser
  super do
    flag   "--json=",
           description: "Output information in JSON format."
    switch "--github",
           description: "Open the GitHub source page for <Cask> in a browser. "
  end
end

.repo_info(cask) ⇒ Object

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.



130
131
132
133
134
135
136
137
138
139
140
# File 'cask/cmd/info.rb', line 130

def self.repo_info(cask)
  return if cask.tap.nil?

  url = if cask.tap.custom_remote? && !cask.tap.remote.nil?
    cask.tap.remote
  else
    "#{cask.tap.default_remote}/blob/HEAD/Casks/#{cask.token}.rb"
  end

  "From: #{Formatter.url(url)}"
end

.title_info(cask) ⇒ Object

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.



81
82
83
84
85
# File 'cask/cmd/info.rb', line 81

def self.title_info(cask)
  title = "#{cask.token}: #{cask.version}"
  title += " (auto_updates)" if cask.auto_updates
  title
end

Instance Method Details

#github_info(cask) ⇒ Object

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.



23
24
25
26
27
28
29
# File 'cask/cmd/info.rb', line 23

def github_info(cask)
  sourcefile_path = cask.sourcefile_path
  dir = cask.tap.path
  path = sourcefile_path.relative_path_from(dir)
  remote = cask.tap.remote
  github_remote_path(remote, path)
end

#github_remote_path(remote, path) ⇒ Object

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.



31
32
33
34
35
36
37
# File 'cask/cmd/info.rb', line 31

def github_remote_path(remote, path)
  if remote =~ %r{^(?:https?://|git(?:@|://))github\.com[:/](.+)/(.+?)(?:\.git)?$}
    "https://github.com/#{Regexp.last_match(1)}/#{Regexp.last_match(2)}/blob/HEAD/#{path}"
  else
    "#{remote}/#{path}"
  end
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 returns an undefined value.



40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
# File 'cask/cmd/info.rb', line 40

def run
  if args.json == "v1"
    puts JSON.pretty_generate(args.named.to_casks.map(&:to_h))
  elsif args.github?
    raise CaskUnspecifiedError if args.no_named?

    args.named.to_casks.map do |cask|
      exec_browser(github_info(cask))
    end
  else
    args.named.to_casks.each_with_index do |cask, i|
      puts unless i.zero?
      odebug "Getting info for Cask #{cask}"
      self.class.info(cask)
    end
  end
end