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 |