lib/phare/cli.rb
# encoding: utf-8
module Phare
class CLI
attr_reader :suite
def initialize(env, argv)
@env = env
@options = parsed_options(argv)
@suite = Phare::CheckSuite.new(@options)
end
def run
if @options[:version]
Phare.puts Phare::VERSION
exit 0
elsif @env['SKIP_CODE_CHECK'] || @env['SKIP_PHARE']
Phare.banner 'Skipping code style checking… Really? Well alright then…'
exit 0
else
exit run_suite
end
end
protected
def parsed_options(argv)
options = { directory: Dir.getwd }
options.merge! parsed_options_from_yaml(File.join(options[:directory], '.phare.yml'))
options.merge! parsed_options_from_arguments(argv)
symbolize_options!(options)
options
end
def symbolize_options!(options)
options[:skip].map!(&:to_sym) if options[:skip]
options[:only].map!(&:to_sym) if options[:only]
options
end
# rubocop:disable Metrics/AbcSize
def parsed_options_from_arguments(argv)
options_to_merge = {}
OptionParser.new do |opts|
opts.banner = 'Usage: phare [options]'
opts.on('--version', 'Display Phare’s version') do
options_to_merge[:version] = true
end
opts.on('--directory x', 'The directory in which to run the checks (default is the current directory') do |directory|
options_to_merge[:directory] = directory
end
opts.on('--skip x,y,z', 'Skip checks') do |checks|
options_to_merge[:skip] = checks.split(',')
end
opts.on('--only x,y,z', 'Only run the specified checks') do |checks|
options_to_merge[:only] = checks.split(',')
end
opts.on('--diff', 'Only run checks on modified files') do
options_to_merge[:diff] = true
end
end.parse! argv
options_to_merge
end
# rubocop:enable Metrics/AbcSize
def parsed_options_from_yaml(file)
options_to_merge = {}
if File.exist?(file)
# Load YAML content
content = YAML.load(File.read(file))
# Symbolize keys
options_to_merge = content.reduce({}) do |memo, (key, value)|
memo.merge! key.to_sym => value
end
end
options_to_merge
end
def run_suite
if @suite.tap(&:run).status == 0
Phare.banner 'Everything looks good, keep on committing!'
0
else
Phare.banner 'Something’s wrong with your code style. Please fix it before committing.'
1
end
end
end
end