libyear-bundler 0.6.0 → 0.7.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/libyear_bundler/cli.rb +2 -2
- data/lib/libyear_bundler/models/ruby.rb +22 -13
- data/lib/libyear_bundler/release_date_cache.rb +10 -1
- data/lib/libyear_bundler/report.rb +13 -6
- data/lib/libyear_bundler/version.rb +1 -1
- data/lib/libyear_bundler/yaml_loader.rb +36 -0
- data/libyear-bundler.gemspec +2 -5
- metadata +4 -32
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e4f90004a4a8f93453f73361a0e3415344017e83f55d10d625b0a3b69f1db74b
|
4
|
+
data.tar.gz: 55d91c831ae79f5b44c6de0bcd2f68e550590d73d5004646c1da0163abbcebea
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e3b1346dbdc4986e539fba595f18e01a46fd03d647210b34a6810e2bd9ae61028ffa00eae7e4e2c4088f524368a2cc74950f5d79610ab6aa2bd93d5c4cdd9e6a
|
7
|
+
data.tar.gz: 2196cc0fe1a16f2fd9ea4646eb7d07a227d58f07dc5f2cca3724c8ae4b08d4386adbdbc51f3364f2891745e7202b106348dabefed1734a6eb3b11c38823e4f17
|
data/lib/libyear_bundler/cli.rb
CHANGED
@@ -26,7 +26,7 @@ module LibyearBundler
|
|
26
26
|
if @options.grand_total?
|
27
27
|
grand_total
|
28
28
|
else
|
29
|
-
|
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
|
@@ -7,6 +7,7 @@ require 'yaml'
|
|
7
7
|
require 'libyear_bundler/calculators/libyear'
|
8
8
|
require 'libyear_bundler/calculators/version_number_delta'
|
9
9
|
require 'libyear_bundler/calculators/version_sequence_delta'
|
10
|
+
require 'libyear_bundler/yaml_loader'
|
10
11
|
|
11
12
|
module LibyearBundler
|
12
13
|
module Models
|
@@ -78,13 +79,19 @@ module LibyearBundler
|
|
78
79
|
def all_versions
|
79
80
|
@_all_versions ||= begin
|
80
81
|
uri = ::URI.parse(RUBY_VERSION_DATA_URL)
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
::
|
86
|
-
.safe_load(response.body
|
87
|
-
|
82
|
+
opt = { open_timeout: 3, read_timeout: 5, use_ssl: true }
|
83
|
+
response = ::Net::HTTP.start(uri.hostname, uri.port, opt) do |con|
|
84
|
+
con.request_get(uri.path)
|
85
|
+
end
|
86
|
+
if response.is_a?(::Net::HTTPSuccess)
|
87
|
+
YAMLLoader.safe_load(response.body).map { |release| release['version'] }
|
88
|
+
else
|
89
|
+
warn format('Unable to get Ruby version list: response code: %s', response.code)
|
90
|
+
[]
|
91
|
+
end
|
92
|
+
rescue ::Timeout::Error
|
93
|
+
warn 'Unable to get Ruby version list: network timeout'
|
94
|
+
[]
|
88
95
|
end
|
89
96
|
end
|
90
97
|
end
|
@@ -169,18 +176,20 @@ module LibyearBundler
|
|
169
176
|
def version_from_bundler
|
170
177
|
return unless File.exist?(@lockfile)
|
171
178
|
ruby_version_string = ::Bundler::LockfileParser
|
172
|
-
.new(@lockfile)
|
179
|
+
.new(::File.read(@lockfile))
|
173
180
|
.ruby_version
|
174
181
|
return if ruby_version_string.nil?
|
175
|
-
|
176
182
|
::Bundler::RubyVersion.from_string(ruby_version_string).gem_version
|
177
183
|
end
|
178
184
|
|
179
|
-
# TODO: this path should probably be relative to `@lockfile` instead
|
180
|
-
# TODO: of being relative to the current working directory.
|
181
185
|
def version_from_ruby_version_file
|
182
|
-
|
183
|
-
|
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
|
184
193
|
end
|
185
194
|
|
186
195
|
def version_from_ruby
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'yaml'
|
2
|
+
require 'libyear_bundler/yaml_loader'
|
2
3
|
|
3
4
|
module LibyearBundler
|
4
5
|
# A cache of release dates by name and version, for both gems and rubies.
|
@@ -18,10 +19,18 @@ module LibyearBundler
|
|
18
19
|
end
|
19
20
|
end
|
20
21
|
|
22
|
+
def empty?
|
23
|
+
@data.empty?
|
24
|
+
end
|
25
|
+
|
26
|
+
def size
|
27
|
+
@data.size
|
28
|
+
end
|
29
|
+
|
21
30
|
class << self
|
22
31
|
def load(path)
|
23
32
|
if File.exist?(path)
|
24
|
-
new(
|
33
|
+
new(YAMLLoader.safe_load(File.read(path)))
|
25
34
|
else
|
26
35
|
new({})
|
27
36
|
end
|
@@ -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
|
19
|
+
def write
|
19
20
|
to_h[:gems].each { |gem| put_line_summary(gem) }
|
20
21
|
|
21
22
|
begin
|
@@ -72,7 +73,7 @@ module LibyearBundler
|
|
72
73
|
meta << libyears
|
73
74
|
end
|
74
75
|
|
75
|
-
puts meta
|
76
|
+
@io.puts meta
|
76
77
|
end
|
77
78
|
|
78
79
|
def meta_line_summary(gem_or_ruby)
|
@@ -87,11 +88,11 @@ module LibyearBundler
|
|
87
88
|
end
|
88
89
|
|
89
90
|
def put_libyear_summary(sum_libyears)
|
90
|
-
puts format("System is %.1f libyears behind", sum_libyears)
|
91
|
+
@io.puts format("System is %.1f libyears behind", sum_libyears)
|
91
92
|
end
|
92
93
|
|
93
94
|
def put_version_delta_summary(sum_major_version, sum_minor_version, sum_patch_version)
|
94
|
-
puts format(
|
95
|
+
@io.puts format(
|
95
96
|
"Major, minor, patch versions behind: %<major>d, %<minor>d, %<patch>d",
|
96
97
|
major: sum_major_version || 0,
|
97
98
|
minor: sum_minor_version || 0,
|
@@ -100,7 +101,7 @@ module LibyearBundler
|
|
100
101
|
end
|
101
102
|
|
102
103
|
def put_sum_seq_delta_summary(sum_seq_delta)
|
103
|
-
puts format(
|
104
|
+
@io.puts format(
|
104
105
|
"Total releases behind: %<seq_delta>d",
|
105
106
|
seq_delta: sum_seq_delta || 0
|
106
107
|
)
|
@@ -130,11 +131,15 @@ module LibyearBundler
|
|
130
131
|
|
131
132
|
def increment_libyears(model, memo)
|
132
133
|
memo[:sum_libyears] += model.libyears
|
134
|
+
rescue StandardError => e
|
135
|
+
warn "Unable to calculate libyears for #{model.name}: #{e}"
|
133
136
|
end
|
134
137
|
|
135
138
|
def increment_seq_deltas(model, memo)
|
136
139
|
memo[:sum_seq_delta] ||= 0
|
137
140
|
memo[:sum_seq_delta] += model.version_sequence_delta
|
141
|
+
rescue StandardError => e
|
142
|
+
warn "Unable to calculate seq deltas for #{model.name}: #{e}"
|
138
143
|
end
|
139
144
|
|
140
145
|
def increment_version_deltas(model, memo)
|
@@ -144,6 +149,8 @@ module LibyearBundler
|
|
144
149
|
memo[:sum_minor_version] += model.version_number_delta[1]
|
145
150
|
memo[:sum_patch_version] ||= 0
|
146
151
|
memo[:sum_patch_version] += model.version_number_delta[2]
|
152
|
+
rescue StandardError => e
|
153
|
+
warn "Unable to calculate version deltas for #{model.name}: #{e}"
|
147
154
|
end
|
148
155
|
end
|
149
156
|
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'yaml'
|
4
|
+
|
5
|
+
module LibyearBundler
|
6
|
+
# Supports different versions of the `YAML` constant. For example,
|
7
|
+
#
|
8
|
+
# > psych 3.0.3 YAML#safe_load expected the permitted/whitelisted classes in
|
9
|
+
# > the second parameter.
|
10
|
+
# >
|
11
|
+
# > psych 3.1.0 YAML#safe_load introduced keyword argument permitted_classes
|
12
|
+
# > in addition to permitted/whitelisted classes in the second parameter.
|
13
|
+
# >
|
14
|
+
# > psych 4.0.0 dropped the second positional parameter of YAML#safe_load, and
|
15
|
+
# > expects the permitted/whitelisted classes only in keyword parameter
|
16
|
+
# > permitted_classes.
|
17
|
+
# > https://github.com/jaredbeck/libyear-bundler/issues/22
|
18
|
+
#
|
19
|
+
# I expect this will only get more complicated over the years, as we try to
|
20
|
+
# support old rubies for as long as possible.
|
21
|
+
#
|
22
|
+
# Other known issues:
|
23
|
+
#
|
24
|
+
# - https://github.com/ruby/psych/issues/262
|
25
|
+
module YAMLLoader
|
26
|
+
class << self
|
27
|
+
def safe_load(yaml, permitted_classes: [::Date])
|
28
|
+
if YAML.method(:safe_load).parameters.include?([:key, :permitted_classes])
|
29
|
+
YAML.safe_load(yaml, permitted_classes: permitted_classes)
|
30
|
+
else
|
31
|
+
YAML.safe_load(yaml, permitted_classes)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
data/libyear-bundler.gemspec
CHANGED
@@ -33,9 +33,6 @@ Gem::Specification.new do |spec|
|
|
33
33
|
# above.
|
34
34
|
spec.add_dependency "bundler", ">= 1.14", "< 3"
|
35
35
|
|
36
|
-
|
37
|
-
|
38
|
-
# rubocop 0.57 drops support for ruby 2.1, so 0.56 is the highest we can
|
39
|
-
# use. We're going to support ruby 2.1 as long as possible. See above.
|
40
|
-
spec.add_development_dependency "rubocop", "~> 0.56.0"
|
36
|
+
# Development dependencies are specified in `/gemfiles`. See CONTRIBUTING.md
|
37
|
+
# for details.
|
41
38
|
end
|
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.
|
4
|
+
version: 0.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jared Beck
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-05-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -30,34 +30,6 @@ dependencies:
|
|
30
30
|
- - "<"
|
31
31
|
- !ruby/object:Gem::Version
|
32
32
|
version: '3'
|
33
|
-
- !ruby/object:Gem::Dependency
|
34
|
-
name: rspec
|
35
|
-
requirement: !ruby/object:Gem::Requirement
|
36
|
-
requirements:
|
37
|
-
- - "~>"
|
38
|
-
- !ruby/object:Gem::Version
|
39
|
-
version: '3.9'
|
40
|
-
type: :development
|
41
|
-
prerelease: false
|
42
|
-
version_requirements: !ruby/object:Gem::Requirement
|
43
|
-
requirements:
|
44
|
-
- - "~>"
|
45
|
-
- !ruby/object:Gem::Version
|
46
|
-
version: '3.9'
|
47
|
-
- !ruby/object:Gem::Dependency
|
48
|
-
name: rubocop
|
49
|
-
requirement: !ruby/object:Gem::Requirement
|
50
|
-
requirements:
|
51
|
-
- - "~>"
|
52
|
-
- !ruby/object:Gem::Version
|
53
|
-
version: 0.56.0
|
54
|
-
type: :development
|
55
|
-
prerelease: false
|
56
|
-
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
requirements:
|
58
|
-
- - "~>"
|
59
|
-
- !ruby/object:Gem::Version
|
60
|
-
version: 0.56.0
|
61
33
|
description:
|
62
34
|
email:
|
63
35
|
- jared@jaredbeck.com
|
@@ -80,6 +52,7 @@ files:
|
|
80
52
|
- lib/libyear_bundler/release_date_cache.rb
|
81
53
|
- lib/libyear_bundler/report.rb
|
82
54
|
- lib/libyear_bundler/version.rb
|
55
|
+
- lib/libyear_bundler/yaml_loader.rb
|
83
56
|
- libyear-bundler.gemspec
|
84
57
|
homepage: https://libyear.com
|
85
58
|
licenses:
|
@@ -100,8 +73,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
100
73
|
- !ruby/object:Gem::Version
|
101
74
|
version: '0'
|
102
75
|
requirements: []
|
103
|
-
|
104
|
-
rubygems_version: 2.7.6.3
|
76
|
+
rubygems_version: 3.2.20
|
105
77
|
signing_key:
|
106
78
|
specification_version: 4
|
107
79
|
summary: A simple measure of dependency freshness
|