lock_diff 0.1.7 → 0.2.0

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7a8a4d4f0d1b66bbec94910baa92602f0082f7ff
4
- data.tar.gz: 0c8931abd27edbfb1850e1ff5a67d1a5665d8c35
3
+ metadata.gz: 98e0f6cd6557833bfc489091d82b2cd47c378b53
4
+ data.tar.gz: c4428c319eb30d33df943619e0c9f5eb681f8f01
5
5
  SHA512:
6
- metadata.gz: 5b3804677178fa3eb873db61726546715f0e192256125614429994de2ed6b232de4e4dec27742ab3c3e1e89da8a2e9904aff06f96144efd122e182f7d610f034
7
- data.tar.gz: f7128f0eb571051ce4b4b64e06e409734d01bd09527c9fa05609f17c4f81b65673bbdd3f6591af928a94ec0d7a48a8e202a8ef6d896a1ab5195b9250f98f8d2b
6
+ metadata.gz: b4a8c1c5a632bb6eaac19862c0e5ecfd65db4573044e953beaa0342e0322d20277fb29c2390dfc2024af3cc8419347c412bfc97345a55ef2eb1837d8d4cd1057
7
+ data.tar.gz: e9648a4468bd361793fb2ff2ac7e8cc4b914e64f00c7e457d0c1c4119bdbba3aedf6b6161f4b6ca3ff5b989ea842b98e901765138ee67534300dc06838664506
@@ -0,0 +1,102 @@
1
+ module LockDiff
2
+ class DiffInfo
3
+ UPGRADE = 'upgrade'
4
+ DOWNGRADE = 'downgrade'
5
+ DELETE = 'delete'
6
+ NEW = 'new'
7
+
8
+ def initialize(old_version:, new_version:, repository:, github_url:)
9
+ @old_version = old_version
10
+ @new_version = new_version
11
+ @repository = repository
12
+ @github_url = github_url
13
+ end
14
+
15
+ def changed?
16
+ @old_version.different?(@new_version)
17
+ end
18
+
19
+ def status
20
+ case
21
+ when @old_version.version && @new_version.version
22
+ if @old_version.version < @new_version.version
23
+ UPGRADE
24
+ else
25
+ DOWNGRADE
26
+ end
27
+ when @old_version.version
28
+ DELETE
29
+ when @new_version.version
30
+ NEW
31
+ end
32
+ end
33
+
34
+ def status_emoji
35
+ case status
36
+ when UPGRADE
37
+ ':chart_with_upwards_trend:'
38
+ when DOWNGRADE
39
+ ':chart_with_downwards_trend:'
40
+ when DELETE
41
+ ':x:'
42
+ when NEW
43
+ ':new:'
44
+ end
45
+ end
46
+
47
+ def change_log_url
48
+ @change_log_url ||= begin
49
+ ref =
50
+ case status
51
+ when UPGRADE, NEW
52
+ @new_version.ref
53
+ when DOWNGRADE, DELETE
54
+ nil # default branch(master)
55
+ end
56
+
57
+ Github::ChangeLogUrlFinder.new(
58
+ repository: @repository,
59
+ github_url: @github_url,
60
+ ref: ref
61
+ ).call
62
+ end
63
+ end
64
+
65
+ def change_log_name
66
+ File.basename(change_log_url)
67
+ end
68
+
69
+ def commits_url
70
+ return unless @github_url
71
+ old_ref = @old_version.ref
72
+ new_ref = @new_version.ref
73
+ commits_url =
74
+ case status
75
+ when UPGRADE
76
+ "compare/#{old_ref}...#{new_ref}"
77
+ when DOWNGRADE
78
+ "compare/#{new_ref}...#{old_ref}"
79
+ when DELETE
80
+ "commits/#{old_ref}"
81
+ when NEW
82
+ "commits/#{new_ref}"
83
+ end
84
+
85
+ "#{@github_url}/#{commits_url}"
86
+ end
87
+
88
+ def commits_url_text
89
+ case status
90
+ when UPGRADE
91
+ "#{@old_version}...#{@new_version}"
92
+ when DOWNGRADE
93
+ "#{@new_version}...#{@old_version}"
94
+ when DELETE
95
+ "#{@old_version}"
96
+ when NEW
97
+ "#{@new_version}"
98
+ end
99
+ end
100
+
101
+ end
102
+ end
@@ -18,8 +18,8 @@ module LockDiff
18
18
 
19
19
  def headers
20
20
  [
21
- "| gem_name | diff | change log |",
22
- "|----------|------|------------|"
21
+ "| name | status | commits | changelog |",
22
+ "|------|--------|---------|-----------|"
23
23
  ]
24
24
  end
25
25
 
@@ -36,7 +36,8 @@ module LockDiff
36
36
  def call
37
37
  text = []
38
38
  text << name
39
- text << diff_text
39
+ text << status
40
+ text << commits_text
40
41
  text << change_log
41
42
  "| #{text.join(' | ')} |"
42
43
  end
@@ -45,15 +46,19 @@ module LockDiff
45
46
 
46
47
  attr_reader :diff_info
47
48
 
49
+ def status
50
+ diff_info.status_emoji
51
+ end
52
+
48
53
  def name
49
54
  "[#{diff_info.name}](#{diff_info.url})"
50
55
  end
51
56
 
52
- def diff_text
53
- if diff_info.diff_url
54
- "[#{diff_info.old_version}...#{diff_info.new_version}](#{diff_info.diff_url})"
57
+ def commits_text
58
+ if diff_info.commits_url
59
+ "[#{diff_info.commits_url_text}](#{diff_info.commits_url})"
55
60
  else
56
- "#{diff_info.old_version}...#{diff_info.new_version}"
61
+ diff_info.commits_url_text
57
62
  end
58
63
  end
59
64
 
@@ -5,6 +5,7 @@ module LockDiff
5
5
 
6
6
  attr_reader :old_version, :new_version
7
7
  def_delegators :@gem, :name, :url
8
+ def_delegators :@diff_info, :changed?, :status, :status_emoji, :change_log_url, :change_log_name, :commits_url, :commits_url_text
8
9
 
9
10
  def self.by(old_spec:, new_spec:)
10
11
  gem = Gem.new(new_spec.name)
@@ -17,30 +18,12 @@ module LockDiff
17
18
 
18
19
  def initialize(gem:, old_version:, new_version:)
19
20
  @gem = gem
20
- @old_version = old_version
21
- @new_version = new_version
22
- end
23
-
24
- def changed?
25
- @old_version.revision != @new_version.revision ||
26
- @old_version.version != @new_version.version
27
- end
28
-
29
- def change_log_url
30
- @change_log_url ||= Github::ChangeLogUrlFinder.new(
31
- repository: @gem.repository,
32
- github_url: @gem.github_url,
33
- ref: @new_version.ref
34
- ).call
35
- end
36
-
37
- def change_log_name
38
- File.basename(change_log_url)
39
- end
40
-
41
- def diff_url
42
- return unless @gem.github_url && @old_version.ref && @new_version.ref
43
- "#{@gem.github_url}/compare/#{@old_version.ref}...#{@new_version.ref}"
21
+ @diff_info = LockDiff::DiffInfo.new(
22
+ old_version: old_version,
23
+ new_version: new_version,
24
+ github_url: gem.github_url,
25
+ repository: gem.repository
26
+ )
44
27
  end
45
28
 
46
29
  end
@@ -15,12 +15,15 @@ module LockDiff
15
15
 
16
16
  def call
17
17
  old_specs_by_name = Spec.specs_by(@old_lockfile).map { |spec| [spec.name, spec] }.to_h
18
+ new_specs_by_name = Spec.specs_by(@new_lockfile).map { |spec| [spec.name, spec] }.to_h
19
+ names = (old_specs_by_name.keys + new_specs_by_name.keys).uniq
18
20
 
19
- Spec.specs_by(@new_lockfile).map do |new_spec|
20
- old_spec = old_specs_by_name[new_spec.name]
21
- next unless old_spec
22
- DiffInfo.by(old_spec: old_spec, new_spec: new_spec)
23
- end.compact.select(&:changed?)
21
+ names.map { |name|
22
+ DiffInfo.by(
23
+ old_spec: old_specs_by_name[name] || NullSpec.new(name),
24
+ new_spec: new_specs_by_name[name] || NullSpec.new(name)
25
+ )
26
+ }.select(&:changed?)
24
27
  end
25
28
  end
26
29
  end
@@ -21,5 +21,20 @@ module LockDiff
21
21
  end
22
22
 
23
23
  end
24
+
25
+ class NullSpec
26
+ attr_reader :name
27
+ def initialize(name)
28
+ @name = name
29
+ end
30
+
31
+ def revision
32
+ end
33
+
34
+ def version
35
+ nil
36
+ end
37
+ end
38
+
24
39
  end
25
40
  end
@@ -2,6 +2,7 @@ module LockDiff
2
2
  module Gem
3
3
  class Version
4
4
  extend Forwardable
5
+ include Comparable
5
6
 
6
7
  def_delegators :@spec, :revision, :version
7
8
 
@@ -18,34 +19,32 @@ module LockDiff
18
19
  revision || version.to_s
19
20
  end
20
21
 
21
- private
22
-
23
- def git_tag
24
- return @git_tag if defined? @git_tag
25
- @git_tag = find_tag(limit: 4, per_page: 50)
22
+ def different?(other)
23
+ revision != other.revision || version != other.version
26
24
  end
27
25
 
28
- def find_tag(page: 1, limit:, per_page:)
29
- return nil if page > limit
30
-
31
- version_str = version.to_s
32
- fetched_tags = LockDiff.client.tag_names(@gem.repository, page: page, per_page: per_page)
33
- tag = fetched_tags.find do |tag_name|
34
- tag_name == version_str ||
35
- tag_name == "v#{version_str}" ||
36
- tag_name == "#{@gem.name}-#{version_str}"
37
- end
38
-
39
- if tag
40
- return tag
26
+ def <=>(other)
27
+ case
28
+ when version && other.version
29
+ version.send("<=>", other.version)
41
30
  else
42
- LockDiff.logger.debug { "Not found tag of #{@gem.name}, #{version_str} by page: #{page}, per_page: #{per_page}"}
43
- unless fetched_tags.count < per_page
44
- find_tag(page: page + 1, limit: limit, per_page: per_page)
45
- end
31
+ nil
46
32
  end
47
33
  end
48
34
 
35
+ private
36
+
37
+ def git_tag
38
+ return unless version
39
+ return @git_tag if defined? @git_tag
40
+ @git_tag = Github::TagFinder.new(
41
+ repository: @gem.repository,
42
+ gem_name: @gem.name,
43
+ version_str: version.to_s
44
+ ).call
45
+ end
46
+
49
47
  end
48
+
50
49
  end
51
50
  end
@@ -0,0 +1,38 @@
1
+ module LockDiff
2
+ module Github
3
+ class TagFinder
4
+ def initialize(repository:, gem_name:, version_str:)
5
+ @repository = repository
6
+ @gem_name = gem_name
7
+ @version_str = version_str
8
+ end
9
+
10
+ def call
11
+ find_tag(limit: 4, per_page: 50)
12
+ end
13
+
14
+ private
15
+
16
+ def find_tag(page: 1, limit:, per_page:)
17
+ return nil if page > limit
18
+
19
+ fetched_tags = LockDiff.client.tag_names(@repository, page: page, per_page: per_page)
20
+ tag = fetched_tags.find do |tag_name|
21
+ tag_name == @version_str ||
22
+ tag_name == "v#{@version_str}" ||
23
+ tag_name == "#{@gem_name}-#{@version_str}"
24
+ end
25
+
26
+ if tag
27
+ return tag
28
+ else
29
+ LockDiff.logger.debug { "Not found tag of #{@gem_name}, #{@version_str} by page: #{page}, per_page: #{per_page}"}
30
+ unless fetched_tags.count < per_page
31
+ find_tag(page: page + 1, limit: limit, per_page: per_page)
32
+ end
33
+ end
34
+ end
35
+
36
+ end
37
+ end
38
+ end
@@ -5,6 +5,7 @@ require_relative "github/content"
5
5
  require_relative "github/github_url_detector"
6
6
  require_relative "github/pull_request"
7
7
  require_relative "github/repository_name_detector"
8
+ require_relative "github/tag_finder"
8
9
 
9
10
  module LockDiff
10
11
  module Github
@@ -1,3 +1,3 @@
1
1
  module LockDiff
2
- VERSION = "0.1.7"
2
+ VERSION = "0.2.0"
3
3
  end
data/lib/lock_diff.rb CHANGED
@@ -1,6 +1,7 @@
1
1
  require "logger"
2
2
  require "forwardable"
3
3
 
4
+ require "lock_diff/diff_info"
4
5
  require "lock_diff/formatter/github_markdown"
5
6
  require "lock_diff/gem"
6
7
  require "lock_diff/github"
@@ -33,7 +34,7 @@ module LockDiff
33
34
  if pr
34
35
  run(repository: repository, number: pr.number, post_comment: post_comment)
35
36
  else
36
- LockDiff.logger.info("Not found pull request by tachikoma.")
37
+ LockDiff.logger.info("Not found pull request by tachikoma. (Hint: search pull request by whether branch name includes 'tachikoma'")
37
38
  end
38
39
  end
39
40
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lock_diff
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.7
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - vividmuimui
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-07-11 00:00:00.000000000 Z
11
+ date: 2017-07-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: octokit
@@ -131,6 +131,7 @@ files:
131
131
  - exe/lock_diff
132
132
  - exe/lock_diff_for_tachikoma
133
133
  - lib/lock_diff.rb
134
+ - lib/lock_diff/diff_info.rb
134
135
  - lib/lock_diff/formatter/github_markdown.rb
135
136
  - lib/lock_diff/gem.rb
136
137
  - lib/lock_diff/gem/diff_info.rb
@@ -148,6 +149,7 @@ files:
148
149
  - lib/lock_diff/github/github_url_detector.rb
149
150
  - lib/lock_diff/github/pull_request.rb
150
151
  - lib/lock_diff/github/repository_name_detector.rb
152
+ - lib/lock_diff/github/tag_finder.rb
151
153
  - lib/lock_diff/option_parser.rb
152
154
  - lib/lock_diff/pull_request.rb
153
155
  - lib/lock_diff/version.rb