intialized the churn calculator object
# File lib/churn/churn_calculator.rb, line 21 def initialize(options={}) start_date = options.fetch(:start_date) { '3 months ago' } @minimum_churn_count = options.fetch(:minimum_churn_count) { 5 } @source_control = set_source_control(start_date) @changes = {} @revision_changes = {} @class_changes = {} @method_changes = {} end
Analyze the source control data, filter, sort, and find more information on the editted files
# File lib/churn/churn_calculator.rb, line 48 def analyze @changes = sort_changes(@changes) @changes = @changes.map {|file_path, times_changed| {:file_path => file_path, :times_changed => times_changed }} calculate_revision_changes @method_changes = sort_changes(@method_changes) @method_changes = @method_changes.map {|method, times_changed| {'method' => method, 'times_changed' => times_changed }} @class_changes = sort_changes(@class_changes) @class_changes = @class_changes.map {|klass, times_changed| {'klass' => klass, 'times_changed' => times_changed }} end
Emits various data from source control to be analyses later… Currently this is broken up like this as a throwback to metric_fu
# File lib/churn/churn_calculator.rb, line 42 def emit @changes = parse_log_for_changes.reject {|file, change_count| change_count < @minimum_churn_count} @revisions = parse_log_for_revision_changes end
prepares the data for the given project to be reported. reads git/svn logs analyzes the output, generates a report and either formats as a nice string or returns hash. @param [Bolean] format to return the data, true for string or false for hash @return [Object] returns either a pretty string or a hash representing the chrun of the project
# File lib/churn/churn_calculator.rb, line 35 def report(print = true) self.emit self.analyze print ? self.to_s : self.to_h end
collect all the data into a single hash data structure.
# File lib/churn/churn_calculator.rb, line 61 def to_h hash = {:churn => {:changes => @changes}} hash[:churn][:class_churn] = @class_changes hash[:churn][:method_churn] = @method_changes #detail the most recent changes made this revision if @revision_changes[@revisions.first] changes = @revision_changes[@revisions.first] hash[:churn][:changed_files] = changes[:files] hash[:churn][:changed_classes] = changes[:classes] hash[:churn][:changed_methods] = changes[:methods] end #TODO crappy place to do this but save hash to revision file but while entirely under metric_fu only choice ChurnHistory.store_revision_history(@revisions.first, hash) hash end
Pretty print the data as a string for the user
# File lib/churn/churn_calculator.rb, line 78 def to_s hash = to_h result = seperator result +="* Revision Changes \n" result += seperator result += "Files: \n" result += display_array(hash[:churn][:changed_files], :fields=>[:to_str], :headers=>{:to_str=>'file'}) result += "\nClasses: \n" result += display_array(hash[:churn][:changed_classes]) result += "\nMethods: \n" result += display_array(hash[:churn][:changed_methods]) + "\n" result += seperator result +="* Project Churn \n" result += seperator result += "Files: \n" result += display_array(hash[:churn][:changes]) result += "\nClasses: \n" class_churn = hash[:churn][:class_churn].map {|e| (e.delete('klass') || {}).merge(e) } result += display_array(class_churn) result += "\nMethods: \n" method_churn = hash[:churn][:method_churn].map {|e| (e.delete('method') || {}).merge(e) } result += display_array(method_churn) end
Generated with the Darkfish Rdoc Generator 2.