123456789_123456789_123456789_123456789_123456789_

Class: SimpleCov::ExitCodes::MinimumCoverageByGroupCheck

Relationships & Source Files
Inherits: Object
Defined in: lib/simplecov/exit_codes/minimum_coverage_by_group_check.rb

Class Method Summary

Instance Attribute Summary

Instance Method Summary

Constructor Details

.new(result, minimum_coverage_by_group) ⇒ MinimumCoverageByGroupCheck

[ GitHub ]

  
# File 'lib/simplecov/exit_codes/minimum_coverage_by_group_check.rb', line 6

def initialize(result, minimum_coverage_by_group)
  @result = result
  @minimum_coverage_by_group = minimum_coverage_by_group
end

Instance Attribute Details

#failing?Boolean (readonly)

[ GitHub ]

  
# File 'lib/simplecov/exit_codes/minimum_coverage_by_group_check.rb', line 11

def failing?
  minimum_violations.any?
end

#minimum_coverage_by_group (readonly, private)

[ GitHub ]

  
# File 'lib/simplecov/exit_codes/minimum_coverage_by_group_check.rb', line 33

attr_reader :result, :minimum_coverage_by_group

#result (readonly, private)

[ GitHub ]

  
# File 'lib/simplecov/exit_codes/minimum_coverage_by_group_check.rb', line 33

attr_reader :result, :minimum_coverage_by_group

Instance Method Details

#compute_minimum_coverage_data (private)

[ GitHub ]

  
# File 'lib/simplecov/exit_codes/minimum_coverage_by_group_check.rb', line 42

def compute_minimum_coverage_data
  minimum_coverage_by_group.flat_map do |group_name, minimum_group_coverage|
    group = find_group(group_name)
    next [] unless group

    minimum_group_coverage.map do |criterion, expected_percent|
      actual_coverage = group.coverage_statistics.fetch(criterion)
      minimum_coverage_hash(group_name, criterion, expected_percent, SimpleCov.round_coverage(actual_coverage.percent))
    end
  end
end

#exit_code

[ GitHub ]

  
# File 'lib/simplecov/exit_codes/minimum_coverage_by_group_check.rb', line 27

def exit_code
  SimpleCov::ExitCodes::MINIMUM_COVERAGE
end

#find_group(group_name) (private)

[ GitHub ]

  
# File 'lib/simplecov/exit_codes/minimum_coverage_by_group_check.rb', line 54

def find_group(group_name)
  result.groups[group_name] || begin
    warn "minimum_coverage_by_group: no group named '#{group_name}' exists. Available groups: #{result.groups.keys.join(', ')}"
    nil
  end
end

#minimum_coverage_hash(group_name, criterion, minimum_expected, actual) (private)

[ GitHub ]

  
# File 'lib/simplecov/exit_codes/minimum_coverage_by_group_check.rb', line 61

def minimum_coverage_hash(group_name, criterion, minimum_expected, actual)
  {
    group_name: group_name,
    criterion: criterion,
    minimum_expected: minimum_expected,
    actual: actual
  }
end

#minimum_violations (private)

[ GitHub ]

  
# File 'lib/simplecov/exit_codes/minimum_coverage_by_group_check.rb', line 35

def minimum_violations
  @minimum_violations ||=
    compute_minimum_coverage_data.select do |achieved|
      achieved.fetch(:actual) < achieved.fetch(:minimum_expected)
    end
end

#report

[ GitHub ]

  
# File 'lib/simplecov/exit_codes/minimum_coverage_by_group_check.rb', line 15

def report
  minimum_violations.each do |violation|
    $stderr.printf(
      "%<criterion>s coverage by group (%<covered>.2f%%) is below the expected minimum coverage (%<minimum_coverage>.2f%%) in %<group_name>s.\n",
      group_name: violation.fetch(:group_name),
      covered: SimpleCov.round_coverage(violation.fetch(:actual)),
      minimum_coverage: violation.fetch(:minimum_expected),
      criterion: violation.fetch(:criterion).capitalize
    )
  end
end