29 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
		
		
			
		
	
	
			29 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
|   | class Hbc::DSL::Installer | ||
|  |   VALID_KEYS = Set.new [ | ||
|  |                          :manual, | ||
|  |                          :script, | ||
|  |                        ] | ||
|  | 
 | ||
|  |   attr_accessor(*VALID_KEYS) | ||
|  | 
 | ||
|  |   def initialize(*parameters) | ||
|  |     raise Hbc::CaskInvalidError.new(token, "'installer' stanza requires an argument") if parameters.empty? | ||
|  |     parameters = {}.merge(*parameters) | ||
|  |     if parameters.key?(:script) && !parameters[:script].respond_to?(:key?) | ||
|  |       if parameters.key?(:executable) | ||
|  |         raise Hbc::CaskInvalidError.new(token, "'installer' stanza gave arguments for both :script and :executable") | ||
|  |       end | ||
|  |       parameters[:executable] = parameters[:script] | ||
|  |       parameters.delete(:script) | ||
|  |       parameters = { script: parameters } | ||
|  |     end | ||
|  |     unless parameters.keys.length == 1
 | ||
|  |       raise "invalid 'installer' stanza: only one of #{VALID_KEYS.inspect} is permitted" | ||
|  |     end | ||
|  |     key = parameters.keys.first | ||
|  |     raise "invalid 'installer' stanza key: '#{key.inspect}'" unless VALID_KEYS.include?(key) | ||
|  |     writer_method = "#{key}=".to_sym | ||
|  |     send(writer_method, parameters[key]) | ||
|  |   end | ||
|  | end |