80 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
		
		
			
		
	
	
			80 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
|   | class Hbc::Artifact::Base | ||
|  |   def self.artifact_name | ||
|  |     @artifact_name ||= name.sub(%r{^.*:}, "").gsub(%r{(.)([A-Z])}, '\1_\2').downcase | ||
|  |   end | ||
|  | 
 | ||
|  |   def self.artifact_english_name | ||
|  |     @artifact_english_name ||= name.sub(%r{^.*:}, "").gsub(%r{(.)([A-Z])}, '\1 \2') | ||
|  |   end | ||
|  | 
 | ||
|  |   def self.artifact_english_article | ||
|  |     @artifact_english_article ||= artifact_english_name =~ %r{^[aeiou]}i ? "an" : "a" | ||
|  |   end | ||
|  | 
 | ||
|  |   def self.artifact_dsl_key | ||
|  |     @artifact_dsl_key ||= artifact_name.to_sym | ||
|  |   end | ||
|  | 
 | ||
|  |   def self.artifact_dirmethod | ||
|  |     @artifact_dirmethod ||= "#{artifact_name}dir".to_sym | ||
|  |   end | ||
|  | 
 | ||
|  |   def self.me?(cask) | ||
|  |     cask.artifacts[artifact_dsl_key].any? | ||
|  |   end | ||
|  | 
 | ||
|  |   attr_reader :force | ||
|  | 
 | ||
|  |   def zap_phase | ||
|  |     odebug "Nothing to do. The #{self.class.artifact_name} artifact has no zap phase." | ||
|  |   end | ||
|  | 
 | ||
|  |   # TODO: this sort of logic would make more sense in dsl.rb, or a | ||
|  |   #       constructor called from dsl.rb, so long as that isn't slow. | ||
|  |   def self.read_script_arguments(arguments, stanza, default_arguments = {}, override_arguments = {}, key = nil) | ||
|  |     # TODO: when stanza names are harmonized with class names, | ||
|  |     #       stanza may not be needed as an explicit argument | ||
|  |     description = stanza.to_s | ||
|  |     if key | ||
|  |       arguments = arguments[key] | ||
|  |       description.concat(" #{key.inspect}") | ||
|  |     end | ||
|  | 
 | ||
|  |     # backward-compatible string value | ||
|  |     arguments = { executable: arguments } if arguments.is_a?(String) | ||
|  | 
 | ||
|  |     # key sanity | ||
|  |     permitted_keys = [:args, :input, :executable, :must_succeed, :sudo, :bsexec, :print_stdout, :print_stderr] | ||
|  |     unknown_keys = arguments.keys - permitted_keys | ||
|  |     unless unknown_keys.empty? | ||
|  |       opoo %Q{Unknown arguments to #{description} -- #{unknown_keys.inspect} (ignored). Running "brew update; brew cleanup; brew cask cleanup" will likely fix it.} | ||
|  |     end | ||
|  |     arguments.reject! { |k| !permitted_keys.include?(k) } | ||
|  | 
 | ||
|  |     # key warnings | ||
|  |     override_keys = override_arguments.keys | ||
|  |     ignored_keys = arguments.keys & override_keys | ||
|  |     unless ignored_keys.empty? | ||
|  |       onoe "Some arguments to #{description} will be ignored -- :#{unknown_keys.inspect} (overridden)." | ||
|  |     end | ||
|  | 
 | ||
|  |     # extract executable | ||
|  |     executable = arguments.key?(:executable) ? arguments.delete(:executable) : nil | ||
|  | 
 | ||
|  |     arguments = default_arguments.merge arguments | ||
|  |     arguments.merge! override_arguments | ||
|  | 
 | ||
|  |     [executable, arguments] | ||
|  |   end | ||
|  | 
 | ||
|  |   def summary | ||
|  |     {} | ||
|  |   end | ||
|  | 
 | ||
|  |   def initialize(cask, command: Hbc::SystemCommand, force: false) | ||
|  |     @cask = cask | ||
|  |     @command = command | ||
|  |     @force = force | ||
|  |   end | ||
|  | end |