Module: Undercover::CLI

Defined in:
lib/undercover/cli.rb

Class Method Summary collapse

Class Method Details

.build_formatter(flagged, validation_error, opts) ⇒ Object



54
55
56
57
58
59
60
# File 'lib/undercover/cli.rb', line 54

def self.build_formatter(flagged, validation_error, opts)
  if opts.formatter == 'json'
    Undercover::JsonFormatter.new(flagged, validation_error)
  else
    Undercover::Formatter.new(flagged, validation_error)
  end
end

.changeset(opts) ⇒ Object



68
69
70
71
# File 'lib/undercover/cli.rb', line 68

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

.handle_missing_coverage_path(opts) ⇒ Object



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

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



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

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, opts) ⇒ Object



45
46
47
48
49
50
51
52
# File 'lib/undercover/cli.rb', line 45

def self.handle_report_validation(report, coverage_path, opts)
  validation_error = report.validate(coverage_path)
  flagged = validation_error ? [] : report.flagged_results
  formatter = build_formatter(flagged, validation_error, opts)

  puts formatter
  formatter.exit_code
end

.run(args) ⇒ Object



8
9
10
11
12
13
# File 'lib/undercover/cli.rb', line 8

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

  run_report(opts)
end

.run_report(opts) ⇒ Object

rubocop:disable Metrics/AbcSize,Metrics/MethodLength



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/undercover/cli.rb', line 15

def self.run_report(opts) # rubocop:disable Metrics/AbcSize,Metrics/MethodLength
  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)

  simplecov_adapter = if opts.simplecov_resultset
                        SimplecovResultAdapter.parse(File.open(opts.simplecov_resultset), opts)
                      else
                        # TODO: lcov will be deprecated end of 2025 and we'll be able to refactor harder
                        LcovParser.parse(File.open(opts.lcov), opts)
                      end

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

.syntax_version(version) ⇒ Object



62
63
64
65
66
# File 'lib/undercover/cli.rb', line 62

def self.syntax_version(version)
  return unless version

  Imagen.parser_version = version
end