| 
									
										
										
										
											2025-01-06 00:12:03 +00:00
										 |  |  | # typed: strict | 
					
						
							| 
									
										
										
										
											2020-07-29 12:20:23 -04:00
										 |  |  | # frozen_string_literal: true | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-08-24 23:46:43 +01:00
										 |  |  | require "requirement" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-11-05 17:17:03 -05:00
										 |  |  | # An adapter for casks to provide dependency information in a formula-like interface. | 
					
						
							| 
									
										
										
										
											2020-07-29 09:14:39 -04:00
										 |  |  | class CaskDependent | 
					
						
							| 
									
										
										
										
											2022-08-24 23:46:43 +01:00
										 |  |  |   # Defines a dependency on another cask | 
					
						
							|  |  |  |   class Requirement < ::Requirement | 
					
						
							|  |  |  |     satisfy(build_env: false) do | 
					
						
							|  |  |  |       Cask::CaskLoader.load(cask).installed? | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-01-06 00:12:03 +00:00
										 |  |  |   sig { returns(Cask::Cask) } | 
					
						
							| 
									
										
										
										
											2021-11-12 13:52:20 -08:00
										 |  |  |   attr_reader :cask | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-01-06 00:12:03 +00:00
										 |  |  |   sig { params(cask: Cask::Cask).void } | 
					
						
							| 
									
										
										
										
											2020-07-29 09:14:39 -04:00
										 |  |  |   def initialize(cask) | 
					
						
							| 
									
										
										
										
											2025-01-06 00:12:03 +00:00
										 |  |  |     @cask = T.let(cask, Cask::Cask) | 
					
						
							| 
									
										
										
										
											2020-07-29 09:14:39 -04:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-01-06 00:12:03 +00:00
										 |  |  |   sig { returns(String) } | 
					
						
							| 
									
										
										
										
											2020-07-29 09:14:39 -04:00
										 |  |  |   def name | 
					
						
							|  |  |  |     @cask.token | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-01-06 00:12:03 +00:00
										 |  |  |   sig { returns(String) } | 
					
						
							| 
									
										
										
										
											2020-07-29 09:14:39 -04:00
										 |  |  |   def full_name | 
					
						
							|  |  |  |     @cask.full_name | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-01-06 00:12:03 +00:00
										 |  |  |   sig { returns(T::Array[Dependency]) } | 
					
						
							| 
									
										
										
										
											2022-02-10 00:29:39 +09:00
										 |  |  |   def runtime_dependencies | 
					
						
							| 
									
										
										
										
											2022-02-16 18:59:58 +09:00
										 |  |  |     deps.flat_map { |dep| [dep, *dep.to_formula.runtime_dependencies] }.uniq | 
					
						
							| 
									
										
										
										
											2020-07-29 09:14:39 -04:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-01-06 00:12:03 +00:00
										 |  |  |   sig { returns(T::Array[Dependency]) } | 
					
						
							| 
									
										
										
										
											2020-07-29 09:14:39 -04:00
										 |  |  |   def deps | 
					
						
							| 
									
										
										
										
											2025-01-06 00:12:03 +00:00
										 |  |  |     @deps ||= T.let( | 
					
						
							|  |  |  |       @cask.depends_on.formula.map do |f| | 
					
						
							|  |  |  |         Dependency.new f | 
					
						
							|  |  |  |       end, | 
					
						
							|  |  |  |       T.nilable(T::Array[Dependency]), | 
					
						
							|  |  |  |     ) | 
					
						
							| 
									
										
										
										
											2020-07-29 09:14:39 -04:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-01-06 00:12:03 +00:00
										 |  |  |   sig { returns(T::Array[CaskDependent::Requirement]) } | 
					
						
							| 
									
										
										
										
											2020-07-29 09:14:39 -04:00
										 |  |  |   def requirements | 
					
						
							| 
									
										
										
										
											2025-01-06 00:12:03 +00:00
										 |  |  |     @requirements ||= T.let( | 
					
						
							|  |  |  |       begin | 
					
						
							|  |  |  |         requirements = [] | 
					
						
							|  |  |  |         dsl_reqs = @cask.depends_on | 
					
						
							| 
									
										
										
										
											2020-07-29 09:14:39 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-01-06 00:12:03 +00:00
										 |  |  |         dsl_reqs.arch&.each do |arch| | 
					
						
							|  |  |  |           arch = if arch[:bits] == 64
 | 
					
						
							|  |  |  |             if arch[:type] == :intel | 
					
						
							|  |  |  |               :x86_64 | 
					
						
							|  |  |  |             else | 
					
						
							|  |  |  |               :"#{arch[:type]}64" | 
					
						
							|  |  |  |             end | 
					
						
							|  |  |  |           elsif arch[:type] == :intel && arch[:bits] == 32
 | 
					
						
							|  |  |  |             :i386 | 
					
						
							| 
									
										
										
										
											2022-08-24 23:46:43 +01:00
										 |  |  |           else | 
					
						
							| 
									
										
										
										
											2025-01-06 00:12:03 +00:00
										 |  |  |             arch[:type] | 
					
						
							| 
									
										
										
										
											2022-08-24 23:46:43 +01:00
										 |  |  |           end | 
					
						
							| 
									
										
										
										
											2025-01-06 00:12:03 +00:00
										 |  |  |           requirements << ArchRequirement.new([arch]) | 
					
						
							|  |  |  |         end | 
					
						
							|  |  |  |         dsl_reqs.cask.each do |cask_ref| | 
					
						
							|  |  |  |           requirements << CaskDependent::Requirement.new([{ cask: cask_ref }]) | 
					
						
							| 
									
										
										
										
											2022-08-24 23:46:43 +01:00
										 |  |  |         end | 
					
						
							| 
									
										
										
										
											2025-01-06 00:12:03 +00:00
										 |  |  |         requirements << dsl_reqs.macos if dsl_reqs.macos | 
					
						
							| 
									
										
										
										
											2020-07-29 09:14:39 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-01-06 00:12:03 +00:00
										 |  |  |         requirements | 
					
						
							|  |  |  |       end, | 
					
						
							|  |  |  |       T.nilable(T::Array[CaskDependent::Requirement]), | 
					
						
							|  |  |  |     ) | 
					
						
							| 
									
										
										
										
											2020-07-29 09:14:39 -04:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-01-06 00:12:03 +00:00
										 |  |  |   sig { params(block: T.nilable(T.proc.returns(T::Array[Dependency]))).returns(T::Array[Dependency]) } | 
					
						
							| 
									
										
										
										
											2022-06-14 15:03:55 -04:00
										 |  |  |   def recursive_dependencies(&block) | 
					
						
							|  |  |  |     Dependency.expand(self, &block) | 
					
						
							| 
									
										
										
										
											2020-07-29 09:14:39 -04:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-01-06 00:12:03 +00:00
										 |  |  |   sig { params(block: T.nilable(T.proc.returns(CaskDependent::Requirement))).returns(Requirements) } | 
					
						
							| 
									
										
										
										
											2020-07-29 09:14:39 -04:00
										 |  |  |   def recursive_requirements(&block) | 
					
						
							|  |  |  |     Requirement.expand(self, &block) | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-01-06 00:12:03 +00:00
										 |  |  |   sig { returns(T::Boolean) } | 
					
						
							| 
									
										
										
										
											2020-07-29 09:14:39 -04:00
										 |  |  |   def any_version_installed? | 
					
						
							|  |  |  |     @cask.installed? | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | end |