class RiskAnalyzer
Public Instance Methods
analyze(file_manager, commit)
click to toggle source
TODO: Add config to match test files
# File lib/risk_analyzer.rb, line 7 def analyze(file_manager, commit) return if commit.nil? files = files_for_diff(commit.file_diffs, file_manager) CommitStats.link_mutations!(files, commit.changes, :change) CommitStats.link_mutations!(files, commit.movements, :movement) line_diffs = CommitStats.link_diffs!(files, commit.file_diffs) score(line_diffs) end
score(line_diffs)
click to toggle source
TODO: Maybe include function score per line.
# File lib/risk_analyzer.rb, line 20 def score(line_diffs) (line_diffs[:insertions] + line_diffs[:deletions]) .reduce(0) do |acc, line| penalty = Line.relevant_change?(line) ? Line.score(line) : 0 penalty /= 3 if line.has_key?(:movement) acc += penalty acc end end
Private Instance Methods
files_for_diff(file_diffs, file_manager)
click to toggle source
# File lib/risk_analyzer.rb, line 32 def files_for_diff(file_diffs, file_manager) file_diffs.reduce({a: {}, b: {}}) do |acc, (b_path, file_diff)| file = { a_file: file_manager.vfs[file_diff.a_file_name] || load_file(file_diff), b_file: file_manager.vfs[file_diff.b_file_name], a_path: file_diff.a_file_name, b_path: file_diff.b_file_name, changes: [], movements: [] } acc[:a][file[:a_path]] = file acc[:b][file[:b_path]] = file acc end end
load_file(file_diff)
click to toggle source
# File lib/risk_analyzer.rb, line 48 def load_file(file_diff) Cache .read_object(file_diff.a_file_id) .deep_symbolize_keys end