diff --git a/xbar/brew-services.10m.rb b/xbar/brew-services.10m.rb index 9fbe534..394166f 100755 --- a/xbar/brew-services.10m.rb +++ b/xbar/brew-services.10m.rb @@ -2,7 +2,7 @@ # frozen_string_literal: true # Brew Services -# v3.1.0 +# v3.1.1 # Jim Myhrberg # jimeh # List and manage Homebrew Services @@ -25,8 +25,35 @@ require 'open3' require 'json' +require 'set' module Xbar + class CommandError < StandardError; end + + module Service + private + + def config + @config ||= Xbar::Config.new + end + + def printer + @printer ||= ::Xbar::Printer.new + end + + def cmd(*args) + out, err, s = Open3.capture3(*args) + if s.exitstatus != 0 + msg = "Command failed: #{args.join(' ')}" + msg += ": #{err}" unless err.empty? + + raise CommandError, msg + end + + out + end + end + class Runner attr_reader :service @@ -51,6 +78,12 @@ module Xbar merge!(JSON.parse(File.read(filename))) end + def as_set(name) + values = self[name]&.to_s&.split(',')&.map(&:strip)&.reject(&:empty?) + + ::Set.new(values || []) + end + def filename @filename ||= "#{__FILE__}.vars.json" end @@ -145,9 +178,9 @@ module Xbar end module Brew - class CommandError < StandardError; end - class Common + include Xbar::Service + def self.prefix(value = nil) return @prefix if value.nil? || value == '' @@ -160,17 +193,6 @@ module Brew self.class.prefix end - def default_printer - @default_printer ||= ::Xbar::Printer.new - end - - def cmd(*args) - out, err, s = Open3.capture3(*args) - raise CommandError, "#{args.join(' ')}: #{err}" if s.exitstatus != 0 - - out - end - def brew_path @brew_path ||= brew_path_from_env || brew_path_from_which || @@ -179,9 +201,12 @@ module Brew end def brew_path_from_env - return if ENV['VAR_BREW_PATH'].to_s == '' + env_value = config['VAR_BREW_PATH']&.to_s&.strip || '' - ENV['VAR_BREW_PATH'] + return if env_value == '' + return unless File.exist?(env_value) + + env_value end def brew_path_from_which @@ -189,6 +214,8 @@ module Brew return if detect == '' detect + rescue Xbar::CommandError + nil end def brew_path_from_fs_check @@ -294,8 +321,6 @@ module Brew prefix ':bulb:' def run - printer = default_printer - brew_check(printer) visible = all_services.visible @@ -387,27 +412,23 @@ module Brew end def hide(*args) - hidden = config['VAR_HIDDEN_SERVICES']&.split(',')&.map(&:strip) || [] - hidden += args + hidden = hidden_services.clone + hidden += args.map(&:strip).reject(&:empty?) - config['VAR_HIDDEN_SERVICES'] = hidden.uniq.sort.join(',') + config['VAR_HIDDEN_SERVICES'] = hidden.sort.join(',') config.save end def show(*args) - hidden = config['VAR_HIDDEN_SERVICES']&.split(',')&.map(&:strip) || [] - hidden -= args + hidden = hidden_services.clone + hidden -= args.map(&:strip).reject(&:empty?) - config['VAR_HIDDEN_SERVICES'] = hidden.uniq.sort.join(',') + config['VAR_HIDDEN_SERVICES'] = hidden.sort.join(',') config.save end private - def config - @config ||= Xbar::Config.new - end - def use_groups? [true, 'true'].include?(config.fetch('VAR_GROUPS', 'true')) end @@ -550,8 +571,7 @@ module Brew end def hidden_services - @hidden_services ||= config.fetch('VAR_HIDDEN_SERVICES', '') - .split(',').uniq.map(&:strip) + @hidden_services ||= config.as_set('VAR_HIDDEN_SERVICES') end end end @@ -560,8 +580,16 @@ begin services = Brew::Services.new Xbar::Runner.new(services).run(ARGV) rescue StandardError => e - puts "ERROR: #{e.message}:\n\t#{e.backtrace.join("\n\t")}" - exit 1 + puts ":warning: #{File.basename(__FILE__)}" + puts '---' + puts 'exit status 1' + puts '---' + puts 'Error:' + puts e.message.to_s + e.backtrace.each do |line| + puts "--#{line}" + end + exit 0 end # rubocop:enable Style/IfUnlessModifier