| 
									
										
										
										
											2019-04-19 15:38:03 +09:00
										 |  |  | # frozen_string_literal: true | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-06 08:29:14 +02:00
										 |  |  | module Cask | 
					
						
							| 
									
										
										
										
											2016-09-24 13:52:43 +02:00
										 |  |  |   class DSL | 
					
						
							| 
									
										
										
										
											2017-11-06 21:13:39 +01:00
										 |  |  |     class DependsOn < DelegateClass(Hash) | 
					
						
							| 
									
										
										
										
											2019-04-19 21:46:20 +09:00
										 |  |  |       VALID_KEYS = Set.new([ | 
					
						
							|  |  |  |                              :formula, | 
					
						
							|  |  |  |                              :cask, | 
					
						
							|  |  |  |                              :macos, | 
					
						
							|  |  |  |                              :arch, | 
					
						
							|  |  |  |                              :x11, | 
					
						
							|  |  |  |                              :java, | 
					
						
							|  |  |  |                            ]).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 }, | 
					
						
							| 
									
										
										
										
											2016-10-14 20:33:16 +02:00
										 |  |  |       }.freeze | 
					
						
							| 
									
										
										
										
											2016-08-18 22:11:42 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-24 13:52:43 +02:00
										 |  |  |       attr_accessor :java | 
					
						
							|  |  |  |       attr_reader :arch, :cask, :formula, :macos, :x11 | 
					
						
							| 
									
										
										
										
											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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-11-06 21:13:39 +01:00
										 |  |  |           self[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
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-23 19:04:17 +02:00
										 |  |  |       def macos=(*args) | 
					
						
							| 
									
										
										
										
											2019-08-15 10:14:10 +02:00
										 |  |  |         raise "Only a single 'depends_on macos:' is allowed." if defined?(@macos) | 
					
						
							| 
									
										
										
										
											2018-09-17 02:45:00 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-08-15 10:14:10 +02:00
										 |  |  |         begin | 
					
						
							|  |  |  |           @macos = if args.count > 1
 | 
					
						
							|  |  |  |             MacOSRequirement.new([args], comparator: "==") | 
					
						
							|  |  |  |           elsif MacOS::Version::SYMBOLS.key?(args.first) | 
					
						
							|  |  |  |             MacOSRequirement.new([args.first], comparator: "==") | 
					
						
							|  |  |  |           elsif /^\s*(?<comparator><|>|[=<>]=)\s*:(?<version>\S+)\s*$/ =~ args.first | 
					
						
							|  |  |  |             MacOSRequirement.new([version.to_sym], comparator: comparator) | 
					
						
							|  |  |  |           elsif /^\s*(?<comparator><|>|[=<>]=)\s*(?<version>\S+)\s*$/ =~ args.first | 
					
						
							|  |  |  |             MacOSRequirement.new([version], comparator: comparator) | 
					
						
							|  |  |  |           else | 
					
						
							|  |  |  |             MacOSRequirement.new([args.first], comparator: "==") | 
					
						
							|  |  |  |           end | 
					
						
							|  |  |  |         rescue | 
					
						
							|  |  |  |           raise "invalid 'depends_on macos' value: #{args.first.inspect}" | 
					
						
							| 
									
										
										
										
											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 | 
					
						
							| 
									
										
										
										
											2016-08-18 22:11:42 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-24 13:52:43 +02:00
										 |  |  |       def x11=(arg) | 
					
						
							|  |  |  |         raise "invalid 'depends_on x11' value: #{arg.inspect}" unless [true, false].include?(arg) | 
					
						
							| 
									
										
										
										
											2018-09-17 02:45:00 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-24 13:52:43 +02:00
										 |  |  |         @x11 = arg | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							| 
									
										
										
										
											2016-08-18 22:11:42 +03:00
										 |  |  |   end | 
					
						
							|  |  |  | end |