Class: RubyMaat::Analysis::Churn::ByEntity

Inherits:
BaseAnalysis show all
Defined in:
lib/ruby_maat/analysis/churn.rb

Overview

Entity churn analysis - churn metrics per entity

Instance Method Summary collapse

Instance Method Details

#analyze(dataset, options = {}) ⇒ Object



89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
# File 'lib/ruby_maat/analysis/churn.rb', line 89

def analyze(dataset, options = {})
  min_revs = options[:min_revs] || 5

  # Group by entity and sum churn metrics
  results = {}

  dataset.to_df.each_row do |row|
    entity = row["entity"]
    added = row["loc_added"] || 0
    deleted = row["loc_deleted"] || 0
    revision = row["revision"]

    results[entity] ||= {entity: entity, added: 0, deleted: 0, revisions: Set.new}
    results[entity][:added] += added
    results[entity][:deleted] += deleted
    results[entity][:revisions] << revision
  end

  # Filter by minimum revisions and format results
  filtered_results = results.values.filter_map do |result|
    next if result[:revisions].size < min_revs

    {
      entity: result[:entity],
      added: result[:added],
      deleted: result[:deleted],
      commits: result[:revisions].size
    }
  end

  # Sort by total churn descending
  filtered_results.sort_by! { |r| -(r[:added] + r[:deleted]) }

  to_csv_data(filtered_results, i[entity added deleted commits])
end