Skip to content
Snippets Groups Projects
Commit 9c8f7138 authored by Markus Reiter's avatar Markus Reiter
Browse files

Add `casks` method to iterate through arguments.

parent 66ce5753
No related branches found
No related tags found
No related merge requests found
Showing
with 112 additions and 166 deletions
......@@ -41,6 +41,43 @@ module Hbc
def initialize(*args)
@args = process_arguments(*args)
end
def self.warn_unavailable_with_suggestion(cask_token, e)
exact_match, partial_matches = Search.search(cask_token)
error_message = e.message
if exact_match
error_message.concat(" Did you mean:\n#{exact_match}")
elsif !partial_matches.empty?
error_message.concat(" Did you mean one of:\n")
.concat(Formatter.columns(partial_matches.take(20)))
end
onoe error_message
end
private
def casks(alternative: -> { [] })
return to_enum(:casks, alternative: alternative) unless block_given?
count = 0
casks = args.empty? ? alternative.call : args
casks.each do |cask_or_token|
begin
yield cask_or_token.respond_to?(:token) ? cask_or_token : CaskLoader.load(cask_or_token)
count += 1
rescue CaskUnavailableError => e
cask_token = cask_or_token
self.class.warn_unavailable_with_suggestion cask_token, e
rescue CaskError => e
onoe e.message
end
end
return :empty if casks.length.zero?
(count == casks.length) ? :complete : :incomplete
end
end
end
end
......@@ -9,11 +9,8 @@ module Hbc
end
def run
casks_to_audit = args.empty? ? Hbc.all : args.map(&CaskLoader.public_method(:load))
failed_casks = casks_to_audit.reject do |cask|
audit(cask)
end
failed_casks = casks(alternative: -> { Hbc.all })
.reject { |cask| audit(cask) }
return if failed_casks.empty?
raise CaskError, "audit failed for casks: #{failed_casks.join(" ")}"
......
......@@ -7,10 +7,12 @@ module Hbc
end
def run
args.each do |cask_token|
cask_path = CaskLoader.path(cask_token)
raise CaskUnavailableError, cask_token.to_s unless cask_path.exist?
puts File.open(cask_path, &:read)
raise CaskError, "Cat incomplete." if cat_casks == :incomplete
end
def cat_casks
casks.each do |cask|
puts File.open(cask.sourcefile_path, &:read)
end
end
......
......@@ -20,7 +20,7 @@ module Hbc
end
def run
remove_cache_files(*@args)
remove_cache_files(*args)
end
def cache_files
......
......@@ -9,10 +9,12 @@ module Hbc
def run
cask_token = args.first
cask_path = CaskLoader.path(cask_token)
unless cask_path.exist?
raise CaskUnavailableError.new(cask_token, "Run #{Formatter.identifier("brew cask create #{cask_token}")} to create a new Cask.")
cask_path = begin
CaskLoader.load(cask_token).sourcefile_path
rescue CaskUnavailableError => e
reason = e.reason.empty? ? "" : "#{e.reason} "
reason.concat("Run #{Formatter.identifier("brew cask create #{e.token}")} to create a new Cask.")
raise e.class.new(e.token, reason)
end
odebug "Opening editor for Cask #{cask_token}"
......
......@@ -9,9 +9,12 @@ module Hbc
end
def run
args.each do |cask_token|
ohai "Downloading external files for Cask #{cask_token}"
cask = CaskLoader.load(cask_token)
raise CaskError, "Fetch incomplete." if fetch_casks == :incomplete
end
def fetch_casks
casks.each do |cask|
ohai "Downloading external files for Cask #{cask}"
downloaded_path = Download.new(cask, force: force?).perform
Verify.all(cask, downloaded_path)
ohai "Success! Downloaded to -> #{downloaded_path}"
......
......@@ -2,9 +2,7 @@ module Hbc
class CLI
class Home < AbstractCommand
def run
casks = args.map(&CaskLoader.public_method(:load))
if casks.empty?
if casks.none?
odebug "Opening project homepage"
self.class.open_url "https://caskroom.github.io/"
else
......
......@@ -7,10 +7,8 @@ module Hbc
end
def run
args.each do |cask_token|
odebug "Getting info for Cask #{cask_token}"
cask = CaskLoader.load(cask_token)
casks.each do |cask|
odebug "Getting info for Cask #{cask}"
self.class.info(cask)
end
end
......
......@@ -10,47 +10,21 @@ module Hbc
end
def run
retval = install_casks
# retval is ternary: true/false/nil
raise CaskError, "nothing to install" if retval.nil?
raise CaskError, "install incomplete" unless retval
raise CaskError, "Install incomplete." if install_casks == :incomplete
end
def install_casks
count = 0
args.each do |cask_token|
casks.each do |cask|
begin
cask = CaskLoader.load(cask_token)
Installer.new(cask, binaries: binaries?,
verbose: verbose?,
verbose: verbose?,
force: force?,
skip_cask_deps: skip_cask_deps?,
require_sha: require_sha?).install
count += 1
rescue CaskAlreadyInstalledError => e
opoo e.message
count += 1
rescue CaskUnavailableError => e
self.class.warn_unavailable_with_suggestion cask_token, e
rescue CaskError => e
onoe e.message
end
end
count.zero? ? nil : count == args.length
end
def self.warn_unavailable_with_suggestion(cask_token, e)
exact_match, partial_matches = Search.search(cask_token)
error_message = e.message
if exact_match
error_message.concat(" Did you mean:\n#{exact_match}")
elsif !partial_matches.empty?
error_message.concat(" Did you mean one of:\n")
.concat(Formatter.columns(partial_matches.take(20)))
end
onoe error_message
end
def self.help
......
......@@ -7,25 +7,11 @@ module Hbc
end
def run
retval = dump_casks
# retval is ternary: true/false/nil
raise CaskError, "nothing to dump" if retval.nil?
raise CaskError, "dump incomplete" unless retval
raise CaskError, "Dump incomplete." if dump_casks == :incomplet
end
def dump_casks
count = 0
args.each do |cask_token|
begin
cask = CaskLoader.load(cask_token)
count += 1
cask.dumpcask
rescue StandardError => e
opoo "#{cask_token} was not found or would not load: #{e}"
end
end
count.zero? ? nil : count == args.length
casks.each(&:dumpcask)
end
def self.help
......
......@@ -72,38 +72,22 @@ module Hbc
end
def run
retval = print_stanzas
# retval is ternary: true/false/nil
if retval.nil?
exit 1 if quiet?
raise CaskError, "nothing to print"
elsif !retval
exit 1 if quiet?
raise CaskError, "print incomplete"
end
return unless print_stanzas == :incomplete
exit 1 if quiet?
raise CaskError, "Print incomplete."
end
def print_stanzas
count = 0
if ARTIFACTS.include?(stanza)
artifact_name = stanza
@stanza = :artifacts
end
cask_tokens = args.empty? ? Hbc.all_tokens : args
cask_tokens.each do |cask_token|
print "#{cask_token}\t" if table?
begin
cask = CaskLoader.load(cask_token)
rescue StandardError
opoo "Cask '#{cask_token}' was not found" unless quiet?
puts ""
next
end
casks(alternative: -> { Hbc.all }).each do |cask|
print "#{cask}\t" if table?
unless cask.respond_to?(stanza)
opoo "no such stanza '#{stanza}' on Cask '#{cask_token}'" unless quiet?
opoo "no such stanza '#{stanza}' on Cask '#{cask}'" unless quiet?
puts ""
next
end
......@@ -111,13 +95,13 @@ module Hbc
begin
value = cask.send(@stanza)
rescue StandardError
opoo "failure calling '#{stanza}' on Cask '#{cask_token}'" unless quiet?
opoo "failure calling '#{stanza}' on Cask '#{cask}'" unless quiet?
puts ""
next
end
if artifact_name && !value.key?(artifact_name)
opoo "no such stanza '#{artifact_name}' on Cask '#{cask_token}'" unless quiet?
opoo "no such stanza '#{artifact_name}' on Cask '#{cask}'" unless quiet?
puts ""
next
end
......@@ -131,10 +115,7 @@ module Hbc
else
puts value.to_s
end
count += 1
end
count.zero? ? nil : count == cask_tokens.length
end
def self.help
......
......@@ -11,44 +11,22 @@ module Hbc
def run
retval = args.any? ? list : list_installed
# retval is ternary: true/false/nil
if retval.nil? && args.none?
opoo "nothing to list" # special case: avoid exit code
elsif retval.nil?
raise CaskError, "nothing to list"
elsif !retval
raise CaskError, "listing incomplete"
end
raise CaskError, "Listing incomplete." if retval == :incomplete
end
def list
count = 0
args.each do |cask_token|
odebug "Listing files for Cask #{cask_token}"
begin
cask = CaskLoader.load(cask_token)
casks.each do |cask|
raise CaskNotInstalledError, cask unless cask.installed?
if cask.installed?
if one?
puts cask.token
elsif versions?
puts self.class.format_versioned(cask)
else
cask = CaskLoader.load_from_file(cask.installed_caskfile)
self.class.list_artifacts(cask)
end
count += 1
else
opoo "#{cask} is not installed"
end
rescue CaskUnavailableError => e
onoe e
if one?
puts cask.token
elsif versions?
puts self.class.format_versioned(cask)
else
cask = CaskLoader.load_from_file(cask.installed_caskfile)
self.class.list_artifacts(cask)
end
end
count.zero? ? nil : count == args.length
end
def self.list_artifacts(cask)
......@@ -69,7 +47,7 @@ module Hbc
puts Formatter.columns(installed_casks.map(&:to_s))
end
installed_casks.empty? ? nil : true
installed_casks.empty? ? :empty : :complete
end
def self.format_versioned(cask)
......
......@@ -10,9 +10,7 @@ module Hbc
end
def run
casks_to_check = args.empty? ? Hbc.installed : args.map(&CaskLoader.public_method(:load))
casks_to_check.each do |cask|
casks(alternative: -> { Hbc.installed }).each do |cask|
odebug "Checking update info of Cask #{cask}"
self.class.list_if_outdated(cask, greedy?, verbose?)
end
......
......@@ -2,27 +2,13 @@ module Hbc
class CLI
class Reinstall < Install
def install_casks
count = 0
args.each do |cask_token|
begin
cask = CaskLoader.load(cask_token)
Installer.new(cask,
binaries: binaries?,
verbose: verbose?,
force: force?,
skip_cask_deps: skip_cask_deps?,
require_sha: require_sha?).reinstall
count += 1
rescue CaskUnavailableError => e
self.class.warn_unavailable_with_suggestion cask_token, e
rescue CaskError => e
onoe e.message
end
casks.each do |cask|
Installer.new(cask, binaries: binaries?,
verbose: verbose?,
force: force?,
skip_cask_deps: skip_cask_deps?,
require_sha: require_sha?).reinstall
end
count.zero? ? nil : count == args.length
end
def self.help
......
......@@ -31,7 +31,7 @@ module Hbc
elsif args.any? { |file| File.exist?(file) }
args
else
args.map { |token| CaskLoader.path(token) }
casks.map(&:sourcefile_path)
end
end
......
......@@ -9,9 +9,12 @@ module Hbc
end
def run
args.each do |cask_token|
odebug "Uninstalling Cask #{cask_token}"
cask = CaskLoader.load(cask_token)
raise CaskError, "Uninstall incomplete." if uninstall_casks == :incomplete
end
def uninstall_casks
casks.each do |cask|
odebug "Uninstalling Cask #{cask}"
raise CaskNotInstalledError, cask unless cask.installed? || force?
......@@ -27,8 +30,8 @@ module Hbc
single = versions.count == 1
puts <<-EOS.undent
#{cask_token} #{versions.join(", ")} #{single ? "is" : "are"} still installed.
Remove #{single ? "it" : "them all"} with `brew cask uninstall --force #{cask_token}`.
#{cask} #{versions.join(", ")} #{single ? "is" : "are"} still installed.
Remove #{single ? "it" : "them all"} with `brew cask uninstall --force #{cask}`.
EOS
end
end
......
......@@ -7,9 +7,12 @@ module Hbc
end
def run
args.each do |cask_token|
odebug "Zapping Cask #{cask_token}"
cask = CaskLoader.load(cask_token)
raise CaskError, "Zap incomplete." if zap_casks == :incomplete
end
def zap_casks
casks.each do |cask|
odebug "Zapping Cask #{cask}"
Installer.new(cask, verbose: verbose?).zap
end
end
......
describe Hbc::CLI::Audit, :cask do
let(:cask) { double }
let(:cask) { double("cask", token: nil) }
describe "selection of Casks to audit" do
it "audits all Casks if no tokens are given" do
......
......@@ -34,9 +34,9 @@ describe Hbc::CLI::Cat, :cask do
end
it "raises an exception when the Cask does not exist" do
expect {
Hbc::CLI::Cat.run("notacask")
}.to raise_error(Hbc::CaskUnavailableError)
expect { Hbc::CLI::Cat.run("notacask") }
.to output(/is unavailable/).to_stderr
.and raise_error(Hbc::CaskError, "Cat incomplete.")
end
describe "when no Cask is specified" do
......
......@@ -54,7 +54,7 @@ describe Hbc::CLI::Fetch, :cask do
shutup do
Hbc::CLI::Fetch.run("notacask")
end
}.to raise_error(Hbc::CaskUnavailableError)
}.to raise_error(Hbc::CaskError, "Fetch incomplete.")
end
describe "when no Cask is specified" do
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment