Sha256: b9124cf15f5cb35a4d39a3169039bb209cc25780ccb7548139bd662a17e84cf4

Contents?: true

Size: 1.18 KB

Versions: 23

Compression:

Stored size: 1.18 KB

Contents

# frozen_string_literal: true

module DeepCover
  class Analyser::StatsBase
    DECIMALS = 2
    include Memoize
    memoize :to_h, :total

    VALUES = %i[executed not_executed not_executable ignored].freeze # All are exclusive

    attr_reader(*VALUES)

    def to_h
      VALUES.map { |val| [val, public_send(val)] }.to_h
    end

    def initialize(executed: 0, not_executed: 0, not_executable: 0, ignored: 0)
      @executed = executed
      @not_executed = not_executed
      @not_executable = not_executable
      @ignored = ignored
      freeze
    end

    def +(other)
      self.class.new(to_h.merge(other.to_h) { |k, a, b| a + b })
    end

    def total
      to_h.values.inject(:+)
    end

    def with(**values)
      self.class.new(to_h.merge(values))
    end

    def potentially_executable
      total - not_executable
    end

    def percent_covered
      return 100 if potentially_executable == 0
      (100 * (1 - not_executed.fdiv(potentially_executable))).round(DECIMALS)
    end
  end

  class Analyser::Stats < Analyser::StatsBase
    memoize :percent

    def percent
      Analyser::StatsBase.new(to_h.transform_values { |v| (100 * v).fdiv(total).round(DECIMALS) })
    end
  end
end

Version data entries

23 entries across 23 versions & 2 rubygems

Version Path
deep-cover-core-0.7.5 lib/deep_cover/analyser/stats.rb
deep-cover-core-0.7.4 lib/deep_cover/analyser/stats.rb
deep-cover-core-0.7.3 lib/deep_cover/analyser/stats.rb
deep-cover-core-0.7.2 lib/deep_cover/analyser/stats.rb
deep-cover-core-0.7.1 lib/deep_cover/analyser/stats.rb
deep-cover-core-0.7.0 lib/deep_cover/analyser/stats.rb
deep-cover-core-0.6.4 lib/deep_cover/analyser/stats.rb
deep-cover-core-0.6.3 lib/deep_cover/analyser/stats.rb
deep-cover-core-0.6.3.pre lib/deep_cover/analyser/stats.rb
deep-cover-0.6.2 lib/deep_cover/analyser/stats.rb
deep-cover-0.6.1 lib/deep_cover/analyser/stats.rb
deep-cover-0.6.0 lib/deep_cover/analyser/stats.rb
deep-cover-0.5.7 lib/deep_cover/analyser/stats.rb
deep-cover-0.5.6 lib/deep_cover/analyser/stats.rb
deep-cover-0.5.5 lib/deep_cover/analyser/stats.rb
deep-cover-0.5.4 lib/deep_cover/analyser/stats.rb
deep-cover-0.5.3 lib/deep_cover/analyser/stats.rb
deep-cover-0.5.2 lib/deep_cover/analyser/stats.rb
deep-cover-0.5.1 lib/deep_cover/analyser/stats.rb
deep-cover-0.5.0 lib/deep_cover/analyser/stats.rb