libyear-bundler 0.6.1 → 0.8.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
  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: []