CodeDiff 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (3) hide show
  1. checksums.yaml +7 -0
  2. data/lib/codediff.rb +90 -0
  3. metadata +45 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 0b85c1c1e888b0926a66acdda805864fa156ea74
4
+ data.tar.gz: b0e61548eb46fc83469ebf1bd7147b7e6601e1d2
5
+ SHA512:
6
+ metadata.gz: 0e8d26cccfc6c0587717ff3f3129a3bcded1c914600e961c3eb926cb84fa5ec08677ad52d7bdcdc5108fc3ae664e1f39410b8d494f03b534de6f4c2e90bea83b
7
+ data.tar.gz: 56348541ef900bf28c4d6f0c484750b68aa3f32bdaa08edb515bd711ae71815204a0a6877e7884116fb81701e8775074f0e584f3caa754aa8f495b6916fad619
@@ -0,0 +1,90 @@
1
+ #!/usr/bin/env ruby
2
+ require 'levenshtein'
3
+ require 'Diffy'
4
+
5
+ class CodeDiff
6
+
7
+ def initialize()
8
+ @res = Hash.new
9
+ @res["additions"] = 0
10
+ @res["subtractions"] = 0
11
+ @res["comment_additions"] = 0
12
+ @res["comment_subtraction"] = 0
13
+ @res["accumulated_distance"] = 0
14
+ @res["percent_change"] = 0
15
+ end
16
+
17
+ # Execute the given file using the associate app
18
+ public
19
+ def run old_file, new_file
20
+
21
+ @res["old_file_lines"] = File.foreach(old_file).count
22
+ @res["new_file_lines"] = File.foreach(new_file).count
23
+
24
+ cmd = "diff -y --left-column " + new_file + " " + old_file
25
+ `#{cmd}`.each_line { |line|
26
+ line = line.chomp
27
+ if !line.end_with?("(")
28
+ lines = line.split("|")
29
+ if lines.size > 1
30
+ @res["accumulated_distance"] += Levenshtein.normalized_distance lines[0].chomp, lines[1].chomp
31
+ end
32
+
33
+ lines = line.split("<")
34
+ if lines.size > 1
35
+ @res["accumulated_distance"] += Levenshtein.normalized_distance lines[0].chomp, lines[1].chomp
36
+ end
37
+
38
+ lines = line.split(">")
39
+ if lines.size > 1
40
+ @res["accumulated_distance"] += Levenshtein.normalized_distance lines[0].chomp, lines[1].chomp
41
+ end
42
+ end
43
+ }
44
+
45
+ # count of different strings
46
+ Diffy::Diff.new(new_file, old_file, :source => 'files').each { |item|
47
+ # remove white spaces
48
+ item = item.gsub(/\s+/, "")
49
+
50
+ # ignore space lines
51
+ next if item.size == 1
52
+
53
+ # see if changed starts with comment
54
+ case item[0]
55
+ when "+"
56
+ case item[1]
57
+ when "#", "/", "*"
58
+ @res["comment_additions"] += 1
59
+ else
60
+ @res["additions"] += 1
61
+ end
62
+ when "-"
63
+ case item[1]
64
+ when "#"
65
+ @res["comment_subtraction"] += 1
66
+ else
67
+ @res["subtractions"] += 1
68
+ end
69
+ end
70
+ }
71
+
72
+
73
+ diff = [@res["additions"], @res["subtractions"]].max
74
+ average = (@res["old_file_lines"] + @res["new_file_lines"]) / 2.0
75
+ @res["percent_change"] = diff / average * 100
76
+
77
+ return @res
78
+
79
+ end
80
+
81
+ public
82
+ def print_results
83
+ puts "accumulated normalized distance:", @res["accumulated_distance"] # chars
84
+ puts "+comments:", @res["comment_additions"]
85
+ puts "-comments:", @res["comment_subtraction"]
86
+ puts "+code:", @res["additions"]
87
+ puts "-code:", @res["subtractions"]
88
+ puts "Percent file change: ", @res["percent_change"]
89
+ end
90
+ end
metadata ADDED
@@ -0,0 +1,45 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: CodeDiff
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Sergey Gorbaty
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-07-31 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: Given two diles gives you a diff of comments, code, percentage change
14
+ and accumulative string distance
15
+ email: serg.gorbaty@gmail.com
16
+ executables: []
17
+ extensions: []
18
+ extra_rdoc_files: []
19
+ files:
20
+ - lib/codediff.rb
21
+ homepage: http://rubygems.org/gems/codediff
22
+ licenses:
23
+ - MIT
24
+ metadata: {}
25
+ post_install_message:
26
+ rdoc_options: []
27
+ require_paths:
28
+ - lib
29
+ required_ruby_version: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ required_rubygems_version: !ruby/object:Gem::Requirement
35
+ requirements:
36
+ - - ">="
37
+ - !ruby/object:Gem::Version
38
+ version: '0'
39
+ requirements: []
40
+ rubyforge_project:
41
+ rubygems_version: 2.4.5
42
+ signing_key:
43
+ specification_version: 4
44
+ summary: Code files' differ
45
+ test_files: []