Newer
Older
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}: ", "")
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
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