Sha256: 8cec3fa322135f9f140179117c5bc5468692b2585c998e2491511cd951287508

Contents?: true

Size: 1.79 KB

Versions: 3

Compression:

Stored size: 1.79 KB

Contents

# frozen_string_literal: true

module Coverband
  module Collectors
    class Delta
      @@previous_coverage = {}
      attr_reader :current_coverage

      def initialize(current_coverage)
        @current_coverage = current_coverage
      end

      class RubyCoverage
        def self.results
          ::Coverage.peek_result.dup
        end
      end

      def self.results(process_coverage = RubyCoverage)
        coverage_results = process_coverage.results
        coverage_results = transform_oneshot_lines_results(coverage_results) if Coverband.configuration.use_oneshot_lines_coverage
        new(coverage_results).results
      end

      def results
        new_results = generate
        @@previous_coverage = current_coverage
        new_results
      end

      def self.reset
        @@previous_coverage = {}
      end

      private

      def generate
        current_coverage.each_with_object({}) do |(file, line_counts), new_results|
          new_results[file] = if @@previous_coverage[file]
                                array_diff(line_counts, @@previous_coverage[file])
                              else
                                line_counts
                              end
        end
      end

      def array_diff(latest, original)
        latest.map.with_index do |v, i|
          [0, v - original[i]].max if v && original[i]
        end
      end

      private_class_method def self.transform_oneshot_lines_results(results)
        results.each_with_object({}) do |(file, coverage), new_results|
          transformed_line_counts = coverage[:oneshot_lines].each_with_object(::Coverage.line_stub(file)) do |line_number, line_counts|
            line_counts[line_number - 1] = 1
          end
          new_results[file] = transformed_line_counts
        end
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
coverband-4.2.1.rc3 lib/coverband/collectors/delta.rb
coverband-4.2.1.rc2 lib/coverband/collectors/delta.rb
coverband-4.2.1.rc1 lib/coverband/collectors/delta.rb