| 
									
										
										
										
											2025-03-18 17:38:37 +00:00
										 |  |  | # typed: true # rubocop:todo Sorbet/StrictSigil | 
					
						
							|  |  |  | # frozen_string_literal: true | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | module Homebrew | 
					
						
							|  |  |  |   module Bundle | 
					
						
							|  |  |  |     module CaskDumper | 
					
						
							| 
									
										
										
										
											2025-03-21 04:24:55 +00:00
										 |  |  |       def self.reset! | 
					
						
							| 
									
										
										
										
											2025-03-18 17:38:37 +00:00
										 |  |  |         @casks = nil | 
					
						
							|  |  |  |         @cask_names = nil | 
					
						
							|  |  |  |         @cask_hash = nil | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-03-21 04:24:55 +00:00
										 |  |  |       def self.cask_names | 
					
						
							| 
									
										
										
										
											2025-03-18 17:38:37 +00:00
										 |  |  |         @cask_names ||= casks.map(&:to_s) | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-03-21 04:24:55 +00:00
										 |  |  |       def self.outdated_cask_names | 
					
						
							| 
									
										
										
										
											2025-03-18 17:38:37 +00:00
										 |  |  |         return [] unless Bundle.cask_installed? | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         casks.select { |c| c.outdated?(greedy: false) } | 
					
						
							|  |  |  |              .map(&:to_s) | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-03-21 04:24:55 +00:00
										 |  |  |       def self.cask_is_outdated_using_greedy?(cask_name) | 
					
						
							| 
									
										
										
										
											2025-03-18 17:38:37 +00:00
										 |  |  |         return false unless Bundle.cask_installed? | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         cask = casks.find { |c| c.to_s == cask_name } | 
					
						
							|  |  |  |         return false if cask.nil? | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         cask.outdated?(greedy: true) | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-03-21 04:24:55 +00:00
										 |  |  |       def self.dump(describe: false) | 
					
						
							| 
									
										
										
										
											2025-03-18 17:38:37 +00:00
										 |  |  |         casks.map do |cask| | 
					
						
							|  |  |  |           description = "# #{cask.desc}\n" if describe && cask.desc.present? | 
					
						
							|  |  |  |           config = ", args: { #{explicit_s(cask.config)} }" if cask.config.present? && cask.config.explicit.present? | 
					
						
							|  |  |  |           "#{description}cask \"#{cask}\"#{config}" | 
					
						
							|  |  |  |         end.join("\n") | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-03-21 04:24:55 +00:00
										 |  |  |       def self.formula_dependencies(cask_list) | 
					
						
							| 
									
										
										
										
											2025-03-18 17:38:37 +00:00
										 |  |  |         return [] unless Bundle.cask_installed? | 
					
						
							|  |  |  |         return [] if cask_list.blank? | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         casks.flat_map do |cask| | 
					
						
							|  |  |  |           next unless cask_list.include?(cask.to_s) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |           cask.depends_on[:formula] | 
					
						
							|  |  |  |         end.compact | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-03-21 04:24:55 +00:00
										 |  |  |       private_class_method def self.casks | 
					
						
							| 
									
										
										
										
											2025-03-18 17:38:37 +00:00
										 |  |  |         return [] unless Bundle.cask_installed? | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         require "cask/caskroom" | 
					
						
							|  |  |  |         @casks ||= Cask::Caskroom.casks | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-03-21 04:24:55 +00:00
										 |  |  |       private_class_method def self.explicit_s(cask_config) | 
					
						
							| 
									
										
										
										
											2025-03-18 17:38:37 +00:00
										 |  |  |         cask_config.explicit.map do |key, value| | 
					
						
							|  |  |  |           # inverse of #env - converts :languages config key back to --language flag | 
					
						
							|  |  |  |           if key == :languages | 
					
						
							|  |  |  |             key = "language" | 
					
						
							|  |  |  |             value = cask_config.explicit.fetch(:languages, []).join(",") | 
					
						
							|  |  |  |           end | 
					
						
							|  |  |  |           "#{key}: \"#{value.to_s.sub(/^#{Dir.home}/, "~")}\"" | 
					
						
							|  |  |  |         end.join(", ") | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | end |