Module: FastCI::SimpleCov::Reporting

Defined in:
lib/fast_ci/simple_cov/reporting.rb

Class Method Summary collapse

Class Method Details

.included(base) ⇒ Object



4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/fast_ci/simple_cov/reporting.rb', line 4

def self.included base
  base.instance_eval do
    unless (ENV['FAST_CI_SECRET_KEY'] || '').empty?
      def write_last_run(result)
        file_coverage = {}

        result.files.each do |file|
          missed_lines = file.missed_lines.map { |missed| missed.line_number }.sort

          file_coverage[file.filename.gsub(root, '.')] = {
            coverage: file.coverage_statistics[:line].percent,
            missed_line_count: missed_lines.count,
            missed_lines: ::FastCI::SimpleCov::Reporting.join_consecutive_numbers(missed_lines),
            covered_lines_count: file.covered_lines.map { |missed| missed.line_number }.count
          }
        end

        folder_coverage = {}

        file_coverage.each do |path, data|
          parent_folders = File.dirname(path).split('/').drop(1)

          (0..(parent_folders.size - 1)).each do |path_index|
            path = './' + parent_folders[0..path_index].join('/')

            folder_coverage[path] ||= {}

            folder_coverage[path][:missed_line_count] =
              (folder_coverage.dig(path, :missed_line_count) || 0) + data[:missed_line_count]
            folder_coverage[path][:covered_line_count] =
              (folder_coverage.dig(path, :covered_line_count) || 0) + data[:covered_lines_count]
          end
        end

        folder_coverage.keys.each do |path|
          folder_coverage[path][:coverage] =
            (100 - folder_coverage[path][:missed_line_count] * 100.0 / (folder_coverage[path][:covered_line_count] + folder_coverage[path][:missed_line_count])).round(2)
        end

        results = {
          file_coverage: file_coverage,
          folder_coverage: folder_coverage,
          coverage: result.coverage_statistics[:line].percent.round(2)
        }

        FastCI.report_simplecov(results.to_json)
      end
    end
  end
end

.join_consecutive_numbers(arr) ⇒ Object



55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
# File 'lib/fast_ci/simple_cov/reporting.rb', line 55

def self.join_consecutive_numbers(arr)
  result = []
  consecutive_group = []

  arr.each_with_index do |num, index|
    if index == 0 || num == arr[index - 1] + 1
      consecutive_group << num
    else
      result << (consecutive_group.size > 1 ? "#{consecutive_group.first}..#{consecutive_group.last}" : consecutive_group.first.to_s)
      consecutive_group = [num]
    end
  end

  result << (consecutive_group.size > 1 ? "#{consecutive_group.first}..#{consecutive_group.last}" : consecutive_group.first.to_s)

  result.compact
end