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
|
2017-06-03 01:29:29 +02:00
|
|
|
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
|
2016-10-14 20:03:34 +02:00
|
|
|
@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?
|
2017-05-29 16:36:01 -07:00
|
|
|
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
|
2017-06-13 17:14:01 +02:00
|
|
|
|
|
|
|
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
|