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
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