brew/Library/Homebrew/cask/lib/hbc/cli/abstract_command.rb

84 lines
2.1 KiB
Ruby
Raw Normal View History

2017-05-21 00:15:56 +02:00
require_relative "options"
2016-09-24 13:52:43 +02:00
module Hbc
class CLI
2017-05-20 19:08:03 +02:00
class AbstractCommand
2017-05-21 00:15:56 +02:00
include Options
option "--[no-]binaries", :binaries, true
option "--debug", :debug, false
option "--verbose", :verbose, false
option "--outdated", :outdated_only, false
option "--require-sha", :require_sha, false
2017-05-21 00:15:56 +02:00
2016-09-24 13:52:43 +02:00
def self.command_name
@command_name ||= name.sub(/^.*:/, "").gsub(/(.)([A-Z])/, '\1_\2').downcase
2016-09-24 13:52:43 +02:00
end
2016-08-18 22:11:42 +03:00
2017-05-20 19:08:03 +02:00
def self.abstract?
name.split("::").last.match?(/^Abstract[^a-z]/)
2017-05-20 19:08:03 +02:00
end
2016-09-24 13:52:43 +02:00
def self.visible
true
end
2016-08-18 22:11:42 +03:00
2016-09-24 13:52:43 +02:00
def self.help
2017-03-16 09:00:57 +01:00
nil
2016-09-24 13:52:43 +02:00
end
2016-08-18 22:11:42 +03:00
2016-09-24 13:52:43 +02:00
def self.needs_init?
false
end
2017-05-19 21:13:08 +02:00
2017-05-20 19:08:03 +02:00
def self.run(*args)
new(*args).run
end
2017-05-21 00:15:56 +02:00
attr_accessor :args
private :args=
2017-05-19 21:13:08 +02:00
def initialize(*args)
2017-05-21 00:15:56 +02:00
@args = process_arguments(*args)
2017-05-19 21:13:08 +02:00
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
2016-09-24 13:52:43 +02:00
end
2016-08-18 22:11:42 +03:00
end
end