class CodeDiff
Public Class Methods
new()
click to toggle source
# File lib/codediff.rb, line 7 def initialize() @res = Hash.new @res["additions"] = 0 @res["subtractions"] = 0 @res["comment_additions"] = 0 @res["comment_subtraction"] = 0 @res["accumulated_distance"] = 0 @res["percent_change"] = 0 end
Public Instance Methods
print_results()
click to toggle source
# File lib/codediff.rb, line 82 def print_results puts "accumulated normalized distance:", @res["accumulated_distance"] # chars puts "+comments:", @res["comment_additions"] puts "-comments:", @res["comment_subtraction"] puts "+code:", @res["additions"] puts "-code:", @res["subtractions"] puts "Percent file change: ", @res["percent_change"] end
run(old_file, new_file)
click to toggle source
Execute the given file using the associate app
# File lib/codediff.rb, line 19 def run old_file, new_file @res["old_file_lines"] = File.foreach(old_file).count @res["new_file_lines"] = File.foreach(new_file).count cmd = "diff -y --left-column " + new_file + " " + old_file `#{cmd}`.each_line { |line| line = line.chomp if !line.end_with?("(") lines = line.split("|") if lines.size > 1 @res["accumulated_distance"] += Levenshtein.normalized_distance lines[0].chomp, lines[1].chomp end lines = line.split("<") if lines.size > 1 @res["accumulated_distance"] += Levenshtein.normalized_distance lines[0].chomp, lines[1].chomp end lines = line.split(">") if lines.size > 1 @res["accumulated_distance"] += Levenshtein.normalized_distance lines[0].chomp, lines[1].chomp end end } # count of different strings Diffy::Diff.new(new_file, old_file, :source => 'files').each { |item| # remove white spaces item = item.gsub(/\s+/, "") # ignore space lines next if item.size == 1 # see if changed starts with comment case item[0] when "+" case item[1] when "#", "/", "*" @res["comment_additions"] += 1 else @res["additions"] += 1 end when "-" case item[1] when "#" @res["comment_subtraction"] += 1 else @res["subtractions"] += 1 end end } diff = [@res["additions"], @res["subtractions"]].max average = (@res["old_file_lines"] + @res["new_file_lines"]) / 2.0 @res["percent_change"] = diff / average * 100 return @res end