| 
									
										
										
										
											2016-09-24 13:52:43 +02:00
										 |  |  | module Hbc | 
					
						
							|  |  |  |   class CLI | 
					
						
							| 
									
										
										
										
											2017-05-20 19:08:03 +02:00
										 |  |  |     class List < AbstractCommand | 
					
						
							| 
									
										
										
										
											2017-05-21 00:15:56 +02:00
										 |  |  |       option "-1", :one, false | 
					
						
							|  |  |  |       option "--versions", :versions, false | 
					
						
							| 
									
										
										
										
											2017-05-20 03:30:46 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-21 00:15:56 +02:00
										 |  |  |       option "-l", (lambda do |*| | 
					
						
							|  |  |  |         one = true # rubocop:disable Lint/UselessAssignment | 
					
						
							| 
									
										
										
										
											2017-05-20 03:30:46 +02:00
										 |  |  |         opoo "Option -l is obsolete! Implying option -1." | 
					
						
							| 
									
										
										
										
											2017-05-21 00:15:56 +02:00
										 |  |  |       end) | 
					
						
							| 
									
										
										
										
											2016-08-18 22:11:42 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-20 03:30:46 +02:00
										 |  |  |       def run | 
					
						
							| 
									
										
										
										
											2017-05-21 00:15:56 +02:00
										 |  |  |         retval = args.any? ? list : list_installed | 
					
						
							| 
									
										
										
										
											2016-09-24 13:52:43 +02:00
										 |  |  |         # retval is ternary: true/false/nil | 
					
						
							| 
									
										
										
										
											2017-05-29 18:24:52 +01:00
										 |  |  |         if retval.nil? && args.none? | 
					
						
							| 
									
										
										
										
											2016-09-24 13:52:43 +02:00
										 |  |  |           opoo "nothing to list" # special case: avoid exit code | 
					
						
							|  |  |  |         elsif retval.nil? | 
					
						
							|  |  |  |           raise CaskError, "nothing to list" | 
					
						
							|  |  |  |         elsif !retval | 
					
						
							|  |  |  |           raise CaskError, "listing incomplete" | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |       end | 
					
						
							| 
									
										
										
										
											2016-08-18 22:11:42 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-20 03:30:46 +02:00
										 |  |  |       def list | 
					
						
							| 
									
										
										
										
											2016-09-24 13:52:43 +02:00
										 |  |  |         count = 0
 | 
					
						
							| 
									
										
										
										
											2016-08-18 22:11:42 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-21 00:15:56 +02:00
										 |  |  |         args.each do |cask_token| | 
					
						
							| 
									
										
										
										
											2016-09-24 13:52:43 +02:00
										 |  |  |           odebug "Listing files for Cask #{cask_token}" | 
					
						
							|  |  |  |           begin | 
					
						
							| 
									
										
										
										
											2017-03-13 01:09:36 +01:00
										 |  |  |             cask = CaskLoader.load(cask_token) | 
					
						
							| 
									
										
										
										
											2016-08-18 22:11:42 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-24 13:52:43 +02:00
										 |  |  |             if cask.installed? | 
					
						
							| 
									
										
										
										
											2017-05-21 00:15:56 +02:00
										 |  |  |               if one? | 
					
						
							| 
									
										
										
										
											2016-09-24 13:52:43 +02:00
										 |  |  |                 puts cask.token | 
					
						
							| 
									
										
										
										
											2017-05-21 00:15:56 +02:00
										 |  |  |               elsif versions? | 
					
						
							| 
									
										
										
										
											2017-05-20 03:30:46 +02:00
										 |  |  |                 puts self.class.format_versioned(cask) | 
					
						
							| 
									
										
										
										
											2016-09-24 13:52:43 +02:00
										 |  |  |               else | 
					
						
							| 
									
										
										
										
											2017-03-12 21:59:13 +01:00
										 |  |  |                 cask = CaskLoader.load_from_file(cask.installed_caskfile) | 
					
						
							| 
									
										
										
										
											2017-05-20 03:30:46 +02:00
										 |  |  |                 self.class.list_artifacts(cask) | 
					
						
							| 
									
										
										
										
											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
										 |  |  |               count += 1
 | 
					
						
							|  |  |  |             else | 
					
						
							|  |  |  |               opoo "#{cask} is not installed" | 
					
						
							|  |  |  |             end | 
					
						
							|  |  |  |           rescue CaskUnavailableError => e | 
					
						
							|  |  |  |             onoe e | 
					
						
							|  |  |  |           end | 
					
						
							| 
									
										
										
										
											2016-08-18 22:11:42 +03:00
										 |  |  |         end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-21 00:15:56 +02:00
										 |  |  |         count.zero? ? nil : count == args.length | 
					
						
							| 
									
										
										
										
											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.list_artifacts(cask) | 
					
						
							|  |  |  |         Artifact.for_cask(cask).each do |artifact| | 
					
						
							| 
									
										
										
										
											2017-02-05 23:27:35 +01:00
										 |  |  |           summary = artifact.summary | 
					
						
							| 
									
										
										
										
											2016-09-24 13:52:43 +02:00
										 |  |  |           ohai summary[:english_description], summary[:contents] unless summary.empty? | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |       end | 
					
						
							| 
									
										
										
										
											2016-08-18 22:11:42 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-20 03:30:46 +02:00
										 |  |  |       def list_installed | 
					
						
							| 
									
										
										
										
											2016-09-24 13:52:43 +02:00
										 |  |  |         installed_casks = Hbc.installed | 
					
						
							| 
									
										
										
										
											2016-08-18 22:11:42 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-21 00:15:56 +02:00
										 |  |  |         if one? | 
					
						
							| 
									
										
										
										
											2016-09-24 13:52:43 +02:00
										 |  |  |           puts installed_casks.map(&:to_s) | 
					
						
							| 
									
										
										
										
											2017-05-21 00:15:56 +02:00
										 |  |  |         elsif versions? | 
					
						
							| 
									
										
										
										
											2017-05-20 03:30:46 +02:00
										 |  |  |           puts installed_casks.map(&self.class.method(:format_versioned)) | 
					
						
							| 
									
										
										
										
											2016-10-19 19:39:39 -04:00
										 |  |  |         elsif !installed_casks.empty? | 
					
						
							| 
									
										
										
										
											2016-10-02 20:39:43 +02:00
										 |  |  |           puts Formatter.columns(installed_casks.map(&:to_s)) | 
					
						
							| 
									
										
										
										
											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
										 |  |  |         installed_casks.empty? ? nil : true | 
					
						
							|  |  |  |       end | 
					
						
							| 
									
										
										
										
											2016-08-18 22:11:42 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-24 13:52:43 +02:00
										 |  |  |       def self.format_versioned(cask) | 
					
						
							|  |  |  |         cask.to_s.concat(cask.versions.map(&:to_s).join(" ").prepend(" ")) | 
					
						
							|  |  |  |       end | 
					
						
							| 
									
										
										
										
											2016-08-18 22:11:42 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-24 13:52:43 +02:00
										 |  |  |       def self.help | 
					
						
							|  |  |  |         "with no args, lists installed Casks; given installed Casks, lists staged files" | 
					
						
							|  |  |  |       end | 
					
						
							| 
									
										
										
										
											2016-09-19 15:15:04 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-24 13:52:43 +02:00
										 |  |  |       def self.needs_init? | 
					
						
							| 
									
										
										
										
											2017-03-06 21:28:34 +01:00
										 |  |  |         true | 
					
						
							| 
									
										
										
										
											2016-09-24 13:52:43 +02:00
										 |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							| 
									
										
										
										
											2016-09-19 15:15:04 +02:00
										 |  |  |   end | 
					
						
							| 
									
										
										
										
											2016-08-18 22:11:42 +03:00
										 |  |  | end |