diff_parser 1.0.0 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- ZjkxM2Q3NjAzODMyYmEwYzI2MGVhZTBjZmY1MTc1YTViN2E0ZGE0Yw==
4
+ NDM3MjZhYmUyMmZkZTQxNDc0N2U4NWNkNGIzM2NjNWQwYTg4MTVlMg==
5
5
  data.tar.gz: !binary |-
6
- N2VhNzliYzNkYmFkZThlNGM4ZDQ2OWE1ODdlNjZmZTliNGIxMDI5NA==
6
+ YzVlNDFlNzEzNDM5MDE5Yjk0OTcyMDliNTYwZWVhM2M1ZTEyYzVhNA==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- NWFkMjQzNTU1NTJkMTEwYjE2MjU4OGZlNzk2ZWNiMjk0MjdkODVlMzBkMTFh
10
- YzE2YmFlNGU3ZDY3MWMxMDZiNzRlZDk0Y2I0YTdkNTlhN2E0NDY4Y2I3ODNi
11
- MjhiNmU3NzAzNTRjZjUwNmU0ZmZjZmMwNWMyYmIwODkzMmE2ZTU=
9
+ YTdmZDQ5ODRmYmMzYzBiOWYwMmVjNzEwMjQzZGY4MjBkNWVlYzk2Y2RlYzU0
10
+ MDNlYzAwZmIzNjVhYTc5YTQ0NmFlNjBiOGUzMmZlNGVhODIwYjg1YTdiMjAw
11
+ NDI1YjM4Yzg2YzkwYzAyNjE1YWQzYmM2YWQ0MDY2NzlhOGYwMjY=
12
12
  data.tar.gz: !binary |-
13
- MmIxMTdmNDRiMmZkMzgwNTQ2NTA0NTllZDRlMmM0NDc3MzMzYzRkYzNlZDQ4
14
- ODM5M2Y5N2NmYjNiYjQzYjI5YTc0NjFhNTU4MzM3NTdjNzhkYzU0YmJhYmM3
15
- NzhhOTI5ZWYwMzVhMjVhMTAwOWUzYTJmODIzMWMyYTkxZTllNjY=
13
+ MTRhOGVjYjYxMjkxZTkwNWJmOTVkYzU5MTNlZGVmMDEyNzdkNGU4NDNkYmY3
14
+ MDdjMzVhN2UxZDdmY2IyOGI1YzYyMjhhNTlmMWI4YmZlZWU1YzUxY2IzOGY3
15
+ NGFiNjI5YzdkMzAwMjFjMDgzOGNjNDc1OGZiNzkxMDk4NGJiMGU=
data/lib/diff_parser.rb CHANGED
@@ -5,3 +5,18 @@ require 'diff_parser/diff_files_collection'
5
5
  require 'diff_parser/raw_line'
6
6
  require 'diff_parser/diff_line'
7
7
  require 'diff_parser/inline_diff'
8
+
9
+ module DiffParser
10
+ mattr_accessor :max_changes_to_render
11
+ @@max_changes_to_render = 500
12
+
13
+ mattr_accessor :reduced_max_changes_to_render
14
+ @@reduced_max_changes_to_render = 10
15
+
16
+ mattr_accessor :changes_reduction_threshold
17
+ @@changes_reduction_threshold = 20
18
+
19
+ def self.setup
20
+ yield self
21
+ end
22
+ end
@@ -1,3 +1,6 @@
1
+ # http://developer.github.com/v3/repos/commits/#get-a-single-commit
2
+ # http://developer.github.com/v3/media/#commits-commit-comparison-and-pull-requests
3
+
1
4
  module DiffParser
2
5
  class Commit
3
6
  attr_reader :github, :repo, :sha
@@ -9,17 +12,7 @@ module DiffParser
9
12
  end
10
13
 
11
14
  def diff
12
- DiffParser::Diff.new(raw, info)
13
- end
14
-
15
- private
16
-
17
- def info
18
- @info ||= github.commit(repo, sha)
19
- end
20
-
21
- def raw
22
- @raw ||= github.commit(repo, sha, accept: 'application/vnd.github.VERSION.diff')
15
+ DiffParser::Diff.new(self)
23
16
  end
24
17
  end
25
18
  end
@@ -1,14 +1,16 @@
1
1
  module DiffParser
2
2
  class Diff
3
- attr_reader :raw_diff, :diff_info
3
+ attr_reader :raw, :info, :commit
4
+ delegate :github, :repo, :sha, to: :commit
4
5
 
5
- def initialize(raw_diff, diff_info)
6
- @raw_diff = raw_diff
7
- @diff_info = diff_info
6
+ def initialize(commit)
7
+ @commit = commit
8
+ @info = github.commit(commit.repo, sha)
9
+ @raw = github.commit(repo, sha, accept: 'application/vnd.github.VERSION.diff')
8
10
  end
9
11
 
10
12
  def files
11
- DiffParser::DiffFilesCollection.new(raw_diff, diff_info)
13
+ DiffParser::DiffFilesCollection.new(self)
12
14
  end
13
15
  end
14
16
  end
@@ -2,15 +2,14 @@ module DiffParser
2
2
  class DiffFilesCollection
3
3
  include Enumerable
4
4
 
5
- attr_reader :raw_diff, :diff_info
5
+ attr_reader :diff
6
6
 
7
- def initialize(raw_diff, diff_info)
8
- @raw_diff = raw_diff
9
- @diff_info = diff_info
7
+ def initialize(diff)
8
+ @diff = diff
10
9
  end
11
10
 
12
11
  def raw_lines
13
- preprocessed_lines = DiffParser::InlineDiff.processing(raw_diff.lines)
12
+ preprocessed_lines = DiffParser::InlineDiff.processing(diff.raw.lines)
14
13
  preprocessed_lines.map { |line| RawLine.new(line) }
15
14
  end
16
15
 
@@ -22,8 +21,8 @@ module DiffParser
22
21
 
23
22
  if raw_line.info?
24
23
  yield current_file if current_file
25
- current_file = DiffParser::File.new(raw_line.full_line, diff_info)
26
- else
24
+ current_file = DiffParser::File.new(raw_line.full_line, diff)
25
+ elsif !current_file.folded?
27
26
  current_file.push_line(raw_line, idx)
28
27
  end
29
28
  end
@@ -1,16 +1,16 @@
1
1
  module DiffParser
2
2
  class File
3
3
  attr_accessor :line_old, :line_new
4
- attr_reader :lines, :sha, :path, :file_info
4
+ attr_reader :lines, :path, :file_info, :diff
5
5
  delegate :additions, :deletions, to: :file_info
6
6
 
7
- def initialize(path, diff_info)
7
+ def initialize(path, diff)
8
8
  @path = preprocess_path(path)
9
+ @diff = diff
9
10
  @lines = []
10
11
  @line_old = 1
11
12
  @line_new = 1
12
- @sha = diff_info.sha
13
- @file_info = retrieve_file_info(diff_info)
13
+ @file_info = retrieve_file_info(diff)
14
14
  end
15
15
 
16
16
  def push_line(raw_line, idx)
@@ -41,14 +41,47 @@ module DiffParser
41
41
  end
42
42
  end
43
43
 
44
+ def sha
45
+ diff.sha
46
+ end
47
+
48
+ def folded?
49
+ @folded ||= if file_max_changes_exceeded?
50
+ lines << DiffLine.new('Changes not shown', 'info', nil, nil, 0, nil)
51
+ true
52
+ else
53
+ false
54
+ end
55
+ end
56
+
44
57
  private
45
58
 
59
+ def max_changes_to_render
60
+ if diff.info.files.count > DiffParser.changes_reduction_threshold
61
+ DiffParser.reduced_max_changes_to_render
62
+ else
63
+ DiffParser.max_changes_to_render
64
+ end
65
+ end
66
+
67
+ def file_max_changes_exceeded?
68
+ (file_info.additions > max_changes_to_render && added?) || (file_info.deletions > max_changes_to_render && removed?)
69
+ end
70
+
71
+ def added?
72
+ file_info.status == 'added'
73
+ end
74
+
75
+ def removed?
76
+ file_info.status == 'removed'
77
+ end
78
+
46
79
  def preprocess_path(path)
47
80
  path.split(' ').last[2..-1]
48
81
  end
49
82
 
50
- def retrieve_file_info(diff_info)
51
- diff_info.files.find { |f| f.filename == path }
83
+ def retrieve_file_info(diff)
84
+ diff.info.files.find { |f| f.filename == path }
52
85
  end
53
86
  end
54
87
  end
@@ -1,3 +1,3 @@
1
1
  module DiffParser
2
- VERSION = "1.0.0"
2
+ VERSION = "1.1.0"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: diff_parser
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - stevo