| 
									
										
										
										
											2019-04-19 15:38:03 +09:00
										 |  |  | # frozen_string_literal: true | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-03 19:39:07 +01:00
										 |  |  | require "cask/download" | 
					
						
							| 
									
										
										
										
											2018-08-06 20:22:19 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-09-06 08:29:14 +02:00
										 |  |  | module Cask | 
					
						
							| 
									
										
										
										
											2016-09-24 13:52:43 +02:00
										 |  |  |   class Auditor | 
					
						
							| 
									
										
										
										
											2019-05-07 17:06:54 +02:00
										 |  |  |     include Checkable | 
					
						
							|  |  |  |     extend Predicable | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def self.audit(cask, audit_download: false, audit_appcast: false, | 
					
						
							|  |  |  |                    check_token_conflicts: false, quarantine: true, commit_range: nil) | 
					
						
							|  |  |  |       new(cask, audit_download: audit_download, | 
					
						
							|  |  |  |                 audit_appcast: audit_appcast, | 
					
						
							|  |  |  |                 check_token_conflicts: check_token_conflicts, | 
					
						
							|  |  |  |                 quarantine: quarantine, commit_range: commit_range).audit | 
					
						
							| 
									
										
										
										
											2016-10-24 04:08:56 -04:00
										 |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-07 06:41:40 +02:00
										 |  |  |     attr_reader :cask, :commit_range | 
					
						
							| 
									
										
										
										
											2016-10-24 04:08:56 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-05-07 17:06:54 +02:00
										 |  |  |     def initialize(cask, audit_download: false, audit_appcast: false, | 
					
						
							|  |  |  |                    check_token_conflicts: false, quarantine: true, commit_range: nil) | 
					
						
							| 
									
										
										
										
											2016-10-24 04:08:56 -04:00
										 |  |  |       @cask = cask | 
					
						
							|  |  |  |       @audit_download = audit_download | 
					
						
							| 
									
										
										
										
											2019-05-07 17:06:54 +02:00
										 |  |  |       @audit_appcast = audit_appcast | 
					
						
							| 
									
										
										
										
											2018-08-31 13:16:11 +00:00
										 |  |  |       @quarantine = quarantine | 
					
						
							| 
									
										
										
										
											2017-05-07 06:41:40 +02:00
										 |  |  |       @commit_range = commit_range | 
					
						
							| 
									
										
										
										
											2016-10-24 04:08:56 -04:00
										 |  |  |       @check_token_conflicts = check_token_conflicts | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def audit_download? | 
					
						
							|  |  |  |       @audit_download | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-05-07 17:06:54 +02:00
										 |  |  |     attr_predicate :audit_appcast?, :quarantine? | 
					
						
							| 
									
										
										
										
											2018-08-31 13:16:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-24 04:08:56 -04:00
										 |  |  |     def check_token_conflicts? | 
					
						
							|  |  |  |       @check_token_conflicts | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def audit | 
					
						
							|  |  |  |       if !ARGV.value("language") && language_blocks | 
					
						
							|  |  |  |         audit_all_languages | 
					
						
							| 
									
										
										
										
											2016-09-25 22:47:31 +02:00
										 |  |  |       else | 
					
						
							| 
									
										
										
										
											2016-10-24 04:08:56 -04:00
										 |  |  |         audit_cask_instance(cask) | 
					
						
							| 
									
										
										
										
											2016-09-25 22:47:31 +02:00
										 |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-24 04:08:56 -04:00
										 |  |  |     private | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def audit_all_languages | 
					
						
							|  |  |  |       saved_languages = MacOS.instance_variable_get(:@languages) | 
					
						
							|  |  |  |       begin | 
					
						
							|  |  |  |         language_blocks.keys.all?(&method(:audit_languages)) | 
					
						
							|  |  |  |       ensure | 
					
						
							|  |  |  |         MacOS.instance_variable_set(:@languages, saved_languages) | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def audit_languages(languages) | 
					
						
							| 
									
										
										
										
											2018-09-17 20:11:11 +02:00
										 |  |  |       ohai "Auditing language: #{languages.map { |lang| "'#{lang}'" }.to_sentence}" | 
					
						
							| 
									
										
										
										
											2016-10-24 04:08:56 -04:00
										 |  |  |       MacOS.instance_variable_set(:@languages, languages) | 
					
						
							| 
									
										
										
										
											2017-10-07 15:58:49 +02:00
										 |  |  |       audit_cask_instance(CaskLoader.load(cask.sourcefile_path)) | 
					
						
							| 
									
										
										
										
											2016-10-24 04:08:56 -04:00
										 |  |  |     end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def audit_cask_instance(cask) | 
					
						
							| 
									
										
										
										
											2018-08-31 13:16:11 +00:00
										 |  |  |       download = audit_download? && Download.new(cask, quarantine: quarantine?) | 
					
						
							| 
									
										
										
										
											2019-05-07 17:06:54 +02:00
										 |  |  |       audit = Audit.new(cask, check_appcast:         audit_appcast?, | 
					
						
							|  |  |  |                               download:              download, | 
					
						
							| 
									
										
										
										
											2017-05-07 06:41:40 +02:00
										 |  |  |                               check_token_conflicts: check_token_conflicts?, | 
					
						
							| 
									
										
										
										
											2018-11-02 17:18:07 +00:00
										 |  |  |                               commit_range:          commit_range) | 
					
						
							| 
									
										
										
										
											2016-09-24 13:52:43 +02:00
										 |  |  |       audit.run! | 
					
						
							|  |  |  |       puts audit.summary | 
					
						
							|  |  |  |       audit.success? | 
					
						
							|  |  |  |     end | 
					
						
							| 
									
										
										
										
											2016-10-24 04:08:56 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def language_blocks | 
					
						
							|  |  |  |       cask.instance_variable_get(:@dsl).instance_variable_get(:@language_blocks) | 
					
						
							|  |  |  |     end | 
					
						
							| 
									
										
										
										
											2016-08-18 22:11:42 +03:00
										 |  |  |   end | 
					
						
							|  |  |  | end |