70 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
			
		
		
	
	
			70 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Ruby
		
	
	
	
	
	
| require "English"
 | |
| 
 | |
| class Hbc::CLI::Style < Hbc::CLI::Base
 | |
|   def self.help
 | |
|     "checks Cask style using RuboCop"
 | |
|   end
 | |
| 
 | |
|   def self.run(*args)
 | |
|     retval = new(args).run
 | |
|     raise Hbc::CaskError, "style check failed" unless retval
 | |
|   end
 | |
| 
 | |
|   attr_reader :args
 | |
|   def initialize(args)
 | |
|     @args = args
 | |
|   end
 | |
| 
 | |
|   def run
 | |
|     install_rubocop
 | |
|     system "rubocop", *rubocop_args, "--", *cask_paths
 | |
|     $CHILD_STATUS.success?
 | |
|   end
 | |
| 
 | |
|   RUBOCOP_CASK_VERSION = "~> 0.8.3".freeze
 | |
| 
 | |
|   def install_rubocop
 | |
|     Hbc::Utils.capture_stderr do
 | |
|       begin
 | |
|         Homebrew.install_gem_setup_path! "rubocop-cask", RUBOCOP_CASK_VERSION, "rubocop"
 | |
|       rescue SystemExit
 | |
|         raise Hbc::CaskError, $stderr.string.chomp.sub("#{::Tty.red}Error#{::Tty.reset}: ", "")
 | |
|       end
 | |
|     end
 | |
|   end
 | |
| 
 | |
|   def cask_paths
 | |
|     @cask_paths ||= if cask_tokens.empty?
 | |
|                       Hbc.all_tapped_cask_dirs
 | |
|                     elsif cask_tokens.any? { |file| File.exist?(file) }
 | |
|                       cask_tokens
 | |
|                     else
 | |
|                       cask_tokens.map { |token| Hbc.path(token) }
 | |
|                     end
 | |
|   end
 | |
| 
 | |
|   def cask_tokens
 | |
|     @cask_tokens ||= self.class.cask_tokens_from(args)
 | |
|   end
 | |
| 
 | |
|   def rubocop_args
 | |
|     fix? ? autocorrect_args : default_args
 | |
|   end
 | |
| 
 | |
|   def default_args
 | |
|     ["--format", "simple", "--force-exclusion", "--config", rubocop_config]
 | |
|   end
 | |
| 
 | |
|   def autocorrect_args
 | |
|     default_args + ["--auto-correct"]
 | |
|   end
 | |
| 
 | |
|   def rubocop_config
 | |
|     Hbc.default_tap.cask_dir.join(".rubocop.yml")
 | |
|   end
 | |
| 
 | |
|   def fix?
 | |
|     args.any? { |arg| arg =~ %r{--(fix|(auto-?)?correct)} }
 | |
|   end
 | |
| end
 | 
