| 
									
										
										
										
											2023-03-18 16:03:10 -07:00
										 |  |  | # typed: true | 
					
						
							| 
									
										
										
										
											2019-04-19 15:38:03 +09:00
										 |  |  | # frozen_string_literal: true | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-09-20 05:50:33 +02:00
										 |  |  | require "delegate" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-08-21 18:36:00 +01:00
										 |  |  | require "requirements/macos_requirement" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-06 08:29:14 +02:00
										 |  |  | module Cask | 
					
						
							| 
									
										
										
										
											2016-09-24 13:52:43 +02:00
										 |  |  |   class DSL | 
					
						
							| 
									
										
										
										
											2020-08-24 23:09:43 +02:00
										 |  |  |     # Class corresponding to the `depends_on` stanza. | 
					
						
							| 
									
										
										
										
											2020-09-20 05:50:33 +02:00
										 |  |  |     class DependsOn < SimpleDelegator | 
					
						
							| 
									
										
										
										
											2019-04-19 21:46:20 +09:00
										 |  |  |       VALID_KEYS = Set.new([ | 
					
						
							| 
									
										
										
										
											2021-02-11 13:24:19 +00:00
										 |  |  |         :formula, | 
					
						
							|  |  |  |         :cask, | 
					
						
							|  |  |  |         :macos, | 
					
						
							|  |  |  |         :arch, | 
					
						
							|  |  |  |       ]).freeze | 
					
						
							| 
									
										
										
										
											2016-08-18 22:11:42 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-24 13:52:43 +02:00
										 |  |  |       VALID_ARCHES = { | 
					
						
							| 
									
										
										
										
											2018-11-02 17:18:07 +00:00
										 |  |  |         intel:  { type: :intel, bits: 64 }, | 
					
						
							| 
									
										
										
										
											2016-10-14 20:33:16 +02:00
										 |  |  |         # specific | 
					
						
							| 
									
										
										
										
											2018-11-02 17:18:07 +00:00
										 |  |  |         x86_64: { type: :intel, bits: 64 }, | 
					
						
							| 
									
										
										
										
											2020-11-06 15:29:15 +01:00
										 |  |  |         arm64:  { type: :arm, bits: 64 }, | 
					
						
							| 
									
										
										
										
											2016-10-14 20:33:16 +02:00
										 |  |  |       }.freeze | 
					
						
							| 
									
										
										
										
											2016-08-18 22:11:42 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2021-04-09 09:30:36 +01:00
										 |  |  |       attr_reader :arch, :cask, :formula, :macos | 
					
						
							| 
									
										
										
										
											2016-08-18 22:11:42 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-24 13:52:43 +02:00
										 |  |  |       def initialize | 
					
						
							| 
									
										
										
										
											2017-11-06 21:13:39 +01:00
										 |  |  |         super({}) | 
					
						
							| 
									
										
										
										
											2017-06-28 17:53:59 +02:00
										 |  |  |         @cask ||= [] | 
					
						
							|  |  |  |         @formula ||= [] | 
					
						
							| 
									
										
										
										
											2016-09-24 13:52:43 +02:00
										 |  |  |       end | 
					
						
							| 
									
										
										
										
											2016-08-18 22:11:42 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-06 21:13:39 +01:00
										 |  |  |       def load(**pairs) | 
					
						
							| 
									
										
										
										
											2016-09-24 13:52:43 +02:00
										 |  |  |         pairs.each do |key, value| | 
					
						
							|  |  |  |           raise "invalid depends_on key: '#{key.inspect}'" unless VALID_KEYS.include?(key) | 
					
						
							| 
									
										
										
										
											2018-09-17 02:45:00 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-03-18 16:03:10 -07:00
										 |  |  |           __getobj__[key] = send(:"#{key}=", *value) | 
					
						
							| 
									
										
										
										
											2016-09-24 13:52:43 +02:00
										 |  |  |         end | 
					
						
							|  |  |  |       end | 
					
						
							| 
									
										
										
										
											2016-08-18 22:11:42 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-23 19:04:17 +02:00
										 |  |  |       def formula=(*args) | 
					
						
							|  |  |  |         @formula.concat(args) | 
					
						
							| 
									
										
										
										
											2016-09-24 13:52:43 +02:00
										 |  |  |       end | 
					
						
							| 
									
										
										
										
											2016-08-18 22:11:42 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-23 19:04:17 +02:00
										 |  |  |       def cask=(*args) | 
					
						
							|  |  |  |         @cask.concat(args) | 
					
						
							| 
									
										
										
										
											2016-09-24 13:52:43 +02:00
										 |  |  |       end | 
					
						
							| 
									
										
										
										
											2016-08-18 22:11:42 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-11-01 20:49:16 +00:00
										 |  |  |       sig { params(args: T.any(String, Symbol)).returns(T.nilable(MacOSRequirement)) } | 
					
						
							| 
									
										
										
										
											2016-10-23 19:04:17 +02:00
										 |  |  |       def macos=(*args) | 
					
						
							| 
									
										
										
										
											2021-01-26 15:21:24 -05:00
										 |  |  |         raise "Only a single 'depends_on macos' is allowed." if defined?(@macos) | 
					
						
							| 
									
										
										
										
											2018-09-17 02:45:00 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2023-03-18 16:03:10 -07:00
										 |  |  |         # workaround for https://github.com/sorbet/sorbet/issues/6860 | 
					
						
							|  |  |  |         first_arg = args.first&.to_s | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-08-15 10:14:10 +02:00
										 |  |  |         begin | 
					
						
							|  |  |  |           @macos = if args.count > 1
 | 
					
						
							|  |  |  |             MacOSRequirement.new([args], comparator: "==") | 
					
						
							| 
									
										
										
										
											2023-05-09 02:15:28 +02:00
										 |  |  |           elsif MacOSVersion::SYMBOLS.key?(args.first) | 
					
						
							| 
									
										
										
										
											2019-08-15 10:14:10 +02:00
										 |  |  |             MacOSRequirement.new([args.first], comparator: "==") | 
					
						
							| 
									
										
										
										
											2023-03-18 16:03:10 -07:00
										 |  |  |           elsif (md = /^\s*(?<comparator><|>|[=<>]=)\s*:(?<version>\S+)\s*$/.match(first_arg)) | 
					
						
							|  |  |  |             MacOSRequirement.new([T.must(md[:version]).to_sym], comparator: md[:comparator]) | 
					
						
							|  |  |  |           elsif (md = /^\s*(?<comparator><|>|[=<>]=)\s*(?<version>\S+)\s*$/.match(first_arg)) | 
					
						
							|  |  |  |             MacOSRequirement.new([md[:version]], comparator: md[:comparator]) | 
					
						
							| 
									
										
										
										
											2020-11-13 10:57:20 -05:00
										 |  |  |           else # rubocop:disable Lint/DuplicateBranch | 
					
						
							| 
									
										
										
										
											2019-08-15 10:14:10 +02:00
										 |  |  |             MacOSRequirement.new([args.first], comparator: "==") | 
					
						
							|  |  |  |           end | 
					
						
							| 
									
										
										
										
											2023-05-09 02:15:28 +02:00
										 |  |  |         rescue MacOSVersion::Error, TypeError => e | 
					
						
							| 
									
										
										
										
											2020-10-05 14:46:43 +02:00
										 |  |  |           raise "invalid 'depends_on macos' value: #{e}" | 
					
						
							| 
									
										
										
										
											2016-10-14 20:11:33 +02:00
										 |  |  |         end | 
					
						
							| 
									
										
										
										
											2016-09-24 13:52:43 +02:00
										 |  |  |       end | 
					
						
							| 
									
										
										
										
											2016-08-18 22:11:42 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-23 19:04:17 +02:00
										 |  |  |       def arch=(*args) | 
					
						
							| 
									
										
										
										
											2016-09-24 13:52:43 +02:00
										 |  |  |         @arch ||= [] | 
					
						
							| 
									
										
										
										
											2016-10-23 19:04:17 +02:00
										 |  |  |         arches = args.map do |elt| | 
					
						
							| 
									
										
										
										
											2016-12-29 18:56:19 +00:00
										 |  |  |           elt.to_s.downcase.sub(/^:/, "").tr("-", "_").to_sym | 
					
						
							| 
									
										
										
										
											2016-10-23 14:44:14 +02:00
										 |  |  |         end | 
					
						
							| 
									
										
										
										
											2016-09-24 13:52:43 +02:00
										 |  |  |         invalid_arches = arches - VALID_ARCHES.keys | 
					
						
							|  |  |  |         raise "invalid 'depends_on arch' values: #{invalid_arches.inspect}" unless invalid_arches.empty? | 
					
						
							| 
									
										
										
										
											2018-09-17 02:45:00 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-24 13:52:43 +02:00
										 |  |  |         @arch.concat(arches.map { |arch| VALID_ARCHES[arch] }) | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							| 
									
										
										
										
											2016-08-18 22:11:42 +03:00
										 |  |  |   end | 
					
						
							|  |  |  | end |