Module: Undercover::CLI

Defined in:
lib/undercover/cli.rb

Constant Summary collapse

WARNINGS_TO_S =

TODO: Report calls >parser< for each file instead of traversing the whole project at first!

{
  stale_coverage: Rainbow('🚨 WARNING: Coverage data is older than your ' \
                          'latest changes and results might be incomplete. ' \
                          'Re-run tests to update').yellow,
  no_changes: Rainbow('✅ No reportable changes').green
}.freeze

Class Method Summary collapse

Class Method Details

.changeset(opts) ⇒ Object



64
65
66
67
68
# File 'lib/undercover/cli.rb', line 64

def self.changeset(opts)
  git_dir = File.join(opts.path, opts.git_dir)
  filter_set = Undercover::FilterSet.new(opts.glob_allow_filters, opts.glob_reject_filters)
  Undercover::Changeset.new(git_dir, opts.compare, filter_set)
end

.handle_missing_coverage_path(opts) ⇒ Object



33
34
35
36
37
38
39
# File 'lib/undercover/cli.rb', line 33

def self.handle_missing_coverage_path(opts)
  puts Rainbow('❌ ERROR: No coverage report found. Checked default paths:').red
  puts Rainbow('  - ./coverage/coverage.json (SimpleCov)').red
  puts Rainbow("  - ./coverage/lcov/#{Pathname.new(File.expand_path(opts.path)).split.last}.lcov (LCOV)").red
  puts Rainbow('Set a custom path with --lcov or --simplecov option').red
  1
end

.handle_missing_file(coverage_path) ⇒ Object



41
42
43
44
# File 'lib/undercover/cli.rb', line 41

def self.handle_missing_file(coverage_path)
  puts Rainbow("❌ ERROR: Coverage report not found at: #{coverage_path}").red
  1
end

.handle_report_validation(report, coverage_path) ⇒ Object



46
47
48
49
50
51
52
53
54
55
56
# File 'lib/undercover/cli.rb', line 46

def self.handle_report_validation(report, coverage_path)
  error = report.validate(coverage_path)
  if error
    puts(WARNINGS_TO_S[error])
    return 0 if error == :no_changes
  end

  flagged = report.flagged_results
  puts Undercover::Formatter.new(flagged)
  flagged.any? ? 1 : 0
end

.run(args) ⇒ Object



17
18
19
20
21
22
# File 'lib/undercover/cli.rb', line 17

def self.run(args)
  opts = Undercover::Options.new.parse(args)
  syntax_version(opts.syntax_version)

  run_report(opts)
end

.run_report(opts) ⇒ Object



24
25
26
27
28
29
30
31
# File 'lib/undercover/cli.rb', line 24

def self.run_report(opts)
  coverage_path = opts.simplecov_resultset || opts.lcov
  return handle_missing_coverage_path(opts) if coverage_path.nil?
  return handle_missing_file(coverage_path) unless File.exist?(coverage_path)

  report = Undercover::Report.new(changeset(opts), opts).build
  handle_report_validation(report, coverage_path)
end

.syntax_version(version) ⇒ Object



58
59
60
61
62
# File 'lib/undercover/cli.rb', line 58

def self.syntax_version(version)
  return unless version

  Imagen.parser_version = version
end