Sha256: 1145b878078e0765ac8a62fca4549944c61e9e2b6cd43cf74790633fb7e9dacf

Contents?: true

Size: 1.14 KB

Versions: 5

Compression:

Stored size: 1.14 KB

Contents

# frozen_string_literal: true

require "rubycritic/core/analysed_module"

module RubyCritic
  # Monkey-patches RubyCritic::AnalysedModule to add a stink_score method
  class AnalysedModule
    PERFECT_COVERAGE = 100

    # Returns a numeric value that represents the stink_score of a module:
    #
    # If module is perfectly covered, stink score is the same as the
    # `churn_times_cost`
    #
    # If module has no coverage, stink score is a penalized value of
    # `churn_times_cost`
    #
    # For now the stink_score is calculated by multiplying `churn_times_cost`
    # times the lack of coverage.
    #
    # For example:
    #
    # When `churn_times_cost` is 100 and module is perfectly covered:
    # stink_score => 100
    #
    # When `churn_times_cost` is 100 and module is not covered at all:
    # stink_score => 100 * 100 = 10_000
    #
    # When `churn_times_cost` is 100 and module is covered at 75%:
    # stink_score => 100 * 25 (percentage uncovered) = 2_500
    #
    # @return [Float]
    def stink_score
      return cost.round(2) if coverage == PERFECT_COVERAGE

      (cost * (PERFECT_COVERAGE - coverage.to_i)).round(2)
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
skunk-0.4.2 samples/rubycritic/analysed_module.rb
skunk-0.4.1 samples/rubycritic/analysed_module.rb
skunk-0.4.0 samples/rubycritic/analysed_module.rb
skunk-0.3.2 samples/rubycritic/analysed_module.rb
skunk-0.3.1 samples/rubycritic/analysed_module.rb