class MetricFu::HotspotRankings

Public Class Methods

new(tool_tables) click to toggle source
# File lib/metric_fu/metrics/hotspots/analysis/rankings.rb, line 8
def initialize(tool_tables)
  @tool_tables = tool_tables
  @file_ranking = MetricFu::Ranking.new
  @class_ranking = MetricFu::Ranking.new
  @method_ranking = MetricFu::Ranking.new
end

Public Instance Methods

calculate_scores(tool_analyzers, granularities) click to toggle source
# File lib/metric_fu/metrics/hotspots/analysis/rankings.rb, line 15
def calculate_scores(tool_analyzers, granularities)
  tool_analyzers.each do |analyzer|
    calculate_scores_by_granularities(analyzer, granularities)
  end
end
worst_classes() click to toggle source
# File lib/metric_fu/metrics/hotspots/analysis/rankings.rb, line 26
def worst_classes
  @class_ranking.delete(nil)
  @class_ranking.top
end
worst_files() click to toggle source
# File lib/metric_fu/metrics/hotspots/analysis/rankings.rb, line 31
def worst_files
  @file_ranking.delete(nil)
  @file_ranking.top
end
worst_methods() click to toggle source
# File lib/metric_fu/metrics/hotspots/analysis/rankings.rb, line 21
def worst_methods
  @method_ranking.delete(nil)
  @method_ranking.top
end

Private Instance Methods

add_to_master_ranking(master_ranking, metric_ranking, analyzer) click to toggle source
# File lib/metric_fu/metrics/hotspots/analysis/rankings.rb, line 84
def add_to_master_ranking(master_ranking, metric_ranking, analyzer)
  metric_ranking.each do |item, _|
    master_ranking[item] ||= 0
    master_ranking[item] += analyzer.score(metric_ranking, item) # scaling? Do we just add in the raw score?
  end
end
calculate_metric_scores(granularity, analyzer) click to toggle source

CALCULATES METRIC HOTSPOT SCORES / RANKINGS PER map/reduce in HOTSPOT subclasses

# File lib/metric_fu/metrics/hotspots/analysis/rankings.rb, line 55
def calculate_metric_scores(granularity, analyzer)
  metric_ranking = MetricFu::Ranking.new
  metric_violations = @tool_tables[analyzer.name]
  metric_violations.each do |row|
    location = row[granularity]
    metric_ranking[location] ||= []
    metric_ranking[location] << analyzer.map(row)
  end

  metric_ranking.each do |item, scores|
    metric_ranking[item] = analyzer.reduce(scores)
  end

  metric_ranking
end
calculate_score_for_granularity(analyzer, granularity) click to toggle source
# File lib/metric_fu/metrics/hotspots/analysis/rankings.rb, line 44
def calculate_score_for_granularity(analyzer, granularity)
  metric_ranking = calculate_metric_scores(granularity, analyzer)

  add_to_master_ranking(
    ranking(granularity),
    metric_ranking,
    analyzer
  )
end
calculate_scores_by_granularities(analyzer, granularities) click to toggle source
# File lib/metric_fu/metrics/hotspots/analysis/rankings.rb, line 38
def calculate_scores_by_granularities(analyzer, granularities)
  granularities.each do |granularity|
    calculate_score_for_granularity(analyzer, granularity)
  end
end
ranking(column_name) click to toggle source
# File lib/metric_fu/metrics/hotspots/analysis/rankings.rb, line 71
def ranking(column_name)
  case column_name
  when "file_path"
    @file_ranking
  when "class_name"
    @class_ranking
  when "method_name"
    @method_ranking
  else
    raise ArgumentError, "Invalid column name #{column_name}"
  end
end