diff --git a/Library/Homebrew/cask/lib/hbc/auditor.rb b/Library/Homebrew/cask/lib/hbc/auditor.rb
index e2d5dea0e53c491fadf78a542808688edbf28392..c2ffbebda825603f3bb1dca2eb24f3f89a520126 100644
--- a/Library/Homebrew/cask/lib/hbc/auditor.rb
+++ b/Library/Homebrew/cask/lib/hbc/auditor.rb
@@ -1,32 +1,63 @@
 module Hbc
   class Auditor
     def self.audit(cask, audit_download: false, check_token_conflicts: false)
-      if !ARGV.value("language") &&
-         languages_blocks = cask.instance_variable_get(:@dsl).instance_variable_get(:@language_blocks)
-        begin
-          saved_languages = MacOS.instance_variable_get(:@languages)
-
-          languages_blocks.keys.map do |languages|
-            ohai "Auditing language: #{languages.map { |lang| "'#{lang}'" }.join(", ")}"
-            MacOS.instance_variable_set(:@languages, languages)
-            audit_cask_instance(Hbc.load(cask.sourcefile_path), audit_download, check_token_conflicts)
-            CLI::Cleanup.run(cask.token) if audit_download
-          end.all?
-        ensure
-          MacOS.instance_variable_set(:@languages, saved_languages)
-        end
+      new(cask, audit_download, check_token_conflicts).audit
+    end
+
+    attr_reader :cask
+
+    def initialize(cask, audit_download, check_token_conflicts)
+      @cask = cask
+      @audit_download = audit_download
+      @check_token_conflicts = check_token_conflicts
+    end
+
+    def audit_download?
+      @audit_download
+    end
+
+    def check_token_conflicts?
+      @check_token_conflicts
+    end
+
+    def audit
+      if !ARGV.value("language") && language_blocks
+        audit_all_languages
       else
-        audit_cask_instance(cask, audit_download, check_token_conflicts)
+        audit_cask_instance(cask)
       end
     end
 
-    def self.audit_cask_instance(cask, audit_download, check_token_conflicts)
-      download = audit_download && Download.new(cask)
+    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)
+      ohai "Auditing language: #{languages.map { |lang| "'#{lang}'" }.join(", ")}"
+      MacOS.instance_variable_set(:@languages, languages)
+      audit_cask_instance(Hbc.load(cask.sourcefile_path))
+    ensure
+      CLI::Cleanup.run(cask.token) if audit_download?
+    end
+
+    def audit_cask_instance(cask)
+      download = audit_download? && Download.new(cask)
       audit = Audit.new(cask, download:              download,
-                              check_token_conflicts: check_token_conflicts)
+                              check_token_conflicts: check_token_conflicts?)
       audit.run!
       puts audit.summary
       audit.success?
     end
+
+    def language_blocks
+      cask.instance_variable_get(:@dsl).instance_variable_get(:@language_blocks)
+    end
   end
 end