83 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
		
		
			
		
	
	
			83 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
|   | class Hbc::CLI::List < Hbc::CLI::Base | ||
|  |   def self.run(*arguments) | ||
|  |     @options = {} | ||
|  |     @options[:one] = true if arguments.delete("-1") | ||
|  |     @options[:versions] = true if arguments.delete("--versions") | ||
|  | 
 | ||
|  |     if arguments.delete("-l") | ||
|  |       @options[:one] = true | ||
|  |       opoo "Option -l is obsolete! Implying option -1." | ||
|  |     end | ||
|  | 
 | ||
|  |     retval = arguments.any? ? list(*arguments) : list_installed | ||
|  |     # retval is ternary: true/false/nil | ||
|  |     if retval.nil? && !arguments.any? | ||
|  |       opoo "nothing to list" # special case: avoid exit code | ||
|  |     elsif retval.nil? | ||
|  |       raise Hbc::CaskError, "nothing to list" | ||
|  |     elsif !retval | ||
|  |       raise Hbc::CaskError, "listing incomplete" | ||
|  |     end | ||
|  |   end | ||
|  | 
 | ||
|  |   def self.list(*cask_tokens) | ||
|  |     count = 0
 | ||
|  | 
 | ||
|  |     cask_tokens.each do |cask_token| | ||
|  |       odebug "Listing files for Cask #{cask_token}" | ||
|  |       begin | ||
|  |         cask = Hbc.load(cask_token) | ||
|  | 
 | ||
|  |         if cask.installed? | ||
|  |           if @options[:one] | ||
|  |             puts cask.token | ||
|  |           elsif @options[:versions] | ||
|  |             puts format_versioned(cask) | ||
|  |           else | ||
|  |             installed_caskfile = cask.metadata_master_container_path.join(*cask.timestamped_versions.last, "Casks", "#{cask_token}.rb") | ||
|  |             cask = Hbc.load(installed_caskfile) | ||
|  |             list_artifacts(cask) | ||
|  |           end | ||
|  | 
 | ||
|  |           count += 1
 | ||
|  |         else | ||
|  |           opoo "#{cask} is not installed" | ||
|  |         end | ||
|  |       rescue Hbc::CaskUnavailableError => e | ||
|  |         onoe e | ||
|  |       end | ||
|  |     end | ||
|  | 
 | ||
|  |     count == 0 ? nil : count == cask_tokens.length | ||
|  |   end | ||
|  | 
 | ||
|  |   def self.list_artifacts(cask) | ||
|  |     Hbc::Artifact.for_cask(cask).each do |artifact| | ||
|  |       summary = artifact.new(cask).summary | ||
|  |       ohai summary[:english_description], summary[:contents] unless summary.empty? | ||
|  |     end | ||
|  |   end | ||
|  | 
 | ||
|  |   def self.list_installed | ||
|  |     installed_casks = Hbc.installed | ||
|  | 
 | ||
|  |     if @options[:one] | ||
|  |       puts installed_casks.map(&:to_s) | ||
|  |     elsif @options[:versions] | ||
|  |       puts installed_casks.map(&method(:format_versioned)) | ||
|  |     else | ||
|  |       puts_columns installed_casks.map(&:to_s) | ||
|  |     end | ||
|  | 
 | ||
|  |     installed_casks.empty? ? nil : true | ||
|  |   end | ||
|  | 
 | ||
|  |   def self.format_versioned(cask) | ||
|  |     cask.to_s.concat(cask.versions.map(&:to_s).join(" ").prepend(" ")) | ||
|  |   end | ||
|  | 
 | ||
|  |   def self.help | ||
|  |     "with no args, lists installed Casks; given installed Casks, lists staged files" | ||
|  |   end | ||
|  | end |