libyear-bundler 0.6.1 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e9b6ae5fa040a91add039ed6d36fd2a6f3084a42efe9adfa1207fdad342ae6b9
4
- data.tar.gz: dc93d875dcf16eb18c20bb09bbc8ed38efb1866b49d3b6fe3b721be3d78f009a
3
+ metadata.gz: 6e363af1df56aed65c6977f010e31514cc9e57e3b4270eacecff7005033554a3
4
+ data.tar.gz: 9293a7bc0a6708685577e28d85f43efeb15c3031f5432277be2fc593391a2d62
5
5
  SHA512:
6
- metadata.gz: ef8e98ac272c82f87634523708d44d0e805d571909c4e68b57be3e760780b13b345b6d1fbe09222dc41aedebcfd47105e6cea4baae13555b693a9ba0ec90a3fb
7
- data.tar.gz: b06125191e905323a3d43098306899be8e48f7dff79df11b62f8a1d9865311ce6d8048c50706316543b8eb3fcb3b925d55d6ba9e7170019cd0a4894d4fb9af45
6
+ metadata.gz: 4bed9a52de479d8a0479846cfa26beaf71b48c4df930a2e1bd86a021fabbb3b755e33148e6d2fcda14ab6297d304ade51331f38074d6e7a45ddab7f476ee0cb7
7
+ data.tar.gz: d190eb7367ccc794de8ba33ecf5794cb86b431a8b9227975d28c93f08f9930c1fd92e555e2280f720b9153647308a57694c2163a1599d43449b212e6ed56448c
@@ -26,7 +26,7 @@ module LibyearBundler
26
26
  if @options.grand_total?
27
27
  grand_total
28
28
  else
29
- print report.to_s
29
+ report.write
30
30
  end
31
31
 
32
32
  # Update cache
@@ -73,7 +73,7 @@ module LibyearBundler
73
73
  end
74
74
 
75
75
  def report
76
- @_report ||= Report.new(bundle_outdated, ruby, @options)
76
+ @_report ||= Report.new(bundle_outdated, ruby, @options, $stdout)
77
77
  end
78
78
 
79
79
  def ruby
@@ -23,23 +23,32 @@ module LibyearBundler
23
23
  begin
24
24
  dep = ::Bundler::Dependency.new(gem_name, gem_version)
25
25
  rescue ::Gem::Requirement::BadRequirementError => e
26
- $stderr.puts "Could not find release date for: #{gem_name}"
27
- $stderr.puts(e)
28
- $stderr.puts(
29
- "Maybe you used git in your Gemfile, which libyear doesn't support " \
30
- "yet. Contributions welcome."
31
- )
26
+ report_problem(gem_name, <<-MSG)
27
+ Could not find release date for: #{gem_name}
28
+ #{e}
29
+ Maybe you used git in your Gemfile, which libyear doesn't support yet. Contributions welcome.
30
+ MSG
32
31
  return nil
33
32
  end
34
33
  tuples, _errors = ::Gem::SpecFetcher.fetcher.search_for_dependency(dep)
35
34
  if tuples.empty?
36
- $stderr.puts "Could not find release date for: #{gem_name}"
35
+ report_problem(gem_name, "Could not find release date for: #{gem_name}")
37
36
  return nil
38
37
  end
39
38
  tup, source = tuples.first # Gem::NameTuple
40
39
  spec = source.fetch_spec(tup) # raises Gem::RemoteFetcher::FetchError
41
40
  spec.date.to_date
42
41
  end
42
+
43
+ private
44
+
45
+ def report_problem(gem_name, message)
46
+ @reported_gems ||= {}
47
+ @reported_gems[gem_name] ||= begin
48
+ $stderr.puts(message)
49
+ true
50
+ end
51
+ end
43
52
  end
44
53
 
45
54
  def installed_version
@@ -176,18 +176,20 @@ module LibyearBundler
176
176
  def version_from_bundler
177
177
  return unless File.exist?(@lockfile)
178
178
  ruby_version_string = ::Bundler::LockfileParser
179
- .new(@lockfile)
179
+ .new(::File.read(@lockfile))
180
180
  .ruby_version
181
181
  return if ruby_version_string.nil?
182
-
183
182
  ::Bundler::RubyVersion.from_string(ruby_version_string).gem_version
184
183
  end
185
184
 
186
- # TODO: this path should probably be relative to `@lockfile` instead
187
- # TODO: of being relative to the current working directory.
188
185
  def version_from_ruby_version_file
189
- return unless ::File.exist?('.ruby-version')
190
- ::Gem::Version.new(::File.read('.ruby-version').strip)
186
+ version_file = File.join(File.dirname(@lockfile), '.ruby-version')
187
+ return unless File.exist?(version_file)
188
+
189
+ version_string = File.read(version_file).strip
190
+ version = version_string.split('-', 2).last
191
+
192
+ ::Gem::Version.new(version) if version
191
193
  end
192
194
 
193
195
  def version_from_ruby
@@ -52,6 +52,10 @@ https://github.com/jaredbeck/libyear-bundler/
52
52
  opts.on('--grand-total', 'Return value for given metric(s)') do
53
53
  @options.send('grand_total?=', true)
54
54
  end
55
+
56
+ opts.on('--sort', 'Sort by selected metric(s), in descending order') do
57
+ @options.send('sort?=', true)
58
+ end
55
59
  end
56
60
  end
57
61
 
@@ -9,13 +9,14 @@ module LibyearBundler
9
9
 
10
10
  # `gems` - Array of `::LibyearBundler::Models::Gem` instances
11
11
  # `options` - Instance of `::LibyearBundler::Options`
12
- def initialize(gems, ruby, options)
12
+ def initialize(gems, ruby, options, io)
13
13
  @gems = gems
14
14
  @ruby = ruby
15
15
  @options = options
16
+ @io = io
16
17
  end
17
18
 
18
- def to_s
19
+ def write
19
20
  to_h[:gems].each { |gem| put_line_summary(gem) }
20
21
 
21
22
  begin
@@ -30,11 +31,12 @@ module LibyearBundler
30
31
  def to_h
31
32
  @_to_h ||=
32
33
  begin
34
+ gems = sorted_gems(@gems)
33
35
  summary = {
34
- gems: @gems,
36
+ gems: gems,
35
37
  sum_libyears: 0.0
36
38
  }
37
- @gems.each { |gem| increment_metrics_summary(gem, summary) }
39
+ gems.each { |gem| increment_metrics_summary(gem, summary) }
38
40
 
39
41
  begin
40
42
  increment_metrics_summary(@ruby, summary) if @ruby.outdated?
@@ -48,6 +50,20 @@ module LibyearBundler
48
50
 
49
51
  private
50
52
 
53
+ def sorted_gems(gems)
54
+ if @options.sort?
55
+ gems.sort_by do |gem|
56
+ [
57
+ (gem.libyears if @options.libyears?),
58
+ (gem.version_sequence_delta if @options.releases?),
59
+ (gem.version_number_delta if @options.versions?)
60
+ ].compact
61
+ end.reverse
62
+ else
63
+ gems
64
+ end
65
+ end
66
+
51
67
  def increment_metrics_summary(model, summary)
52
68
  increment_libyears(model, summary) if @options.libyears?
53
69
  increment_version_deltas(model, summary) if @options.versions?
@@ -72,7 +88,7 @@ module LibyearBundler
72
88
  meta << libyears
73
89
  end
74
90
 
75
- puts meta
91
+ @io.puts meta
76
92
  end
77
93
 
78
94
  def meta_line_summary(gem_or_ruby)
@@ -87,11 +103,11 @@ module LibyearBundler
87
103
  end
88
104
 
89
105
  def put_libyear_summary(sum_libyears)
90
- puts format("System is %.1f libyears behind", sum_libyears)
106
+ @io.puts format("System is %.1f libyears behind", sum_libyears)
91
107
  end
92
108
 
93
109
  def put_version_delta_summary(sum_major_version, sum_minor_version, sum_patch_version)
94
- puts format(
110
+ @io.puts format(
95
111
  "Major, minor, patch versions behind: %<major>d, %<minor>d, %<patch>d",
96
112
  major: sum_major_version || 0,
97
113
  minor: sum_minor_version || 0,
@@ -100,7 +116,7 @@ module LibyearBundler
100
116
  end
101
117
 
102
118
  def put_sum_seq_delta_summary(sum_seq_delta)
103
- puts format(
119
+ @io.puts format(
104
120
  "Total releases behind: %<seq_delta>d",
105
121
  seq_delta: sum_seq_delta || 0
106
122
  )
@@ -130,11 +146,15 @@ module LibyearBundler
130
146
 
131
147
  def increment_libyears(model, memo)
132
148
  memo[:sum_libyears] += model.libyears
149
+ rescue StandardError => e
150
+ warn "Unable to calculate libyears for #{model.name}: #{e}"
133
151
  end
134
152
 
135
153
  def increment_seq_deltas(model, memo)
136
154
  memo[:sum_seq_delta] ||= 0
137
155
  memo[:sum_seq_delta] += model.version_sequence_delta
156
+ rescue StandardError => e
157
+ warn "Unable to calculate seq deltas for #{model.name}: #{e}"
138
158
  end
139
159
 
140
160
  def increment_version_deltas(model, memo)
@@ -144,6 +164,8 @@ module LibyearBundler
144
164
  memo[:sum_minor_version] += model.version_number_delta[1]
145
165
  memo[:sum_patch_version] ||= 0
146
166
  memo[:sum_patch_version] += model.version_number_delta[2]
167
+ rescue StandardError => e
168
+ warn "Unable to calculate version deltas for #{model.name}: #{e}"
147
169
  end
148
170
  end
149
171
  end
@@ -1,3 +1,3 @@
1
1
  module LibyearBundler
2
- VERSION = "0.6.1".freeze
2
+ VERSION = "0.8.0".freeze
3
3
  end
@@ -11,7 +11,7 @@ Gem::Specification.new do |spec|
11
11
  spec.email = ["jared@jaredbeck.com"]
12
12
  spec.summary = "A simple measure of dependency freshness"
13
13
  spec.homepage = "https://libyear.com"
14
- spec.licenses = ["GPL-3.0"]
14
+ spec.licenses = ["GPL-3.0-only"]
15
15
  spec.files = `git ls-files -z`.split("\x0").select do |f|
16
16
  f.start_with?('lib/') ||
17
17
  [
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: libyear-bundler
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.1
4
+ version: 0.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jared Beck
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-05-02 00:00:00.000000000 Z
11
+ date: 2024-09-14 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -30,7 +30,7 @@ dependencies:
30
30
  - - "<"
31
31
  - !ruby/object:Gem::Version
32
32
  version: '3'
33
- description:
33
+ description:
34
34
  email:
35
35
  - jared@jaredbeck.com
36
36
  executables:
@@ -56,9 +56,9 @@ files:
56
56
  - libyear-bundler.gemspec
57
57
  homepage: https://libyear.com
58
58
  licenses:
59
- - GPL-3.0
59
+ - GPL-3.0-only
60
60
  metadata: {}
61
- post_install_message:
61
+ post_install_message:
62
62
  rdoc_options: []
63
63
  require_paths:
64
64
  - lib
@@ -73,8 +73,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
73
73
  - !ruby/object:Gem::Version
74
74
  version: '0'
75
75
  requirements: []
76
- rubygems_version: 3.2.20
77
- signing_key:
76
+ rubygems_version: 3.5.16
77
+ signing_key:
78
78
  specification_version: 4
79
79
  summary: A simple measure of dependency freshness
80
80
  test_files: []