libyear-bundler 0.6.0 → 0.7.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: 6605cda8b92cd002e2b1a536a716ba50d8c0df4b550db28f6b0be4760d7734f7
4
- data.tar.gz: eec844bd3aaf31c95fc29827ca6a33166da392ab799a03b3b3b5269cc5507fe7
3
+ metadata.gz: e4f90004a4a8f93453f73361a0e3415344017e83f55d10d625b0a3b69f1db74b
4
+ data.tar.gz: 55d91c831ae79f5b44c6de0bcd2f68e550590d73d5004646c1da0163abbcebea
5
5
  SHA512:
6
- metadata.gz: 555318739eb3506de90e6d21f103fbb8ce2c0bd4225595830465c0aae476a906d55ffcf534e375925146c695348bbca975fe75ef962752bb4d41f474b6308b2d
7
- data.tar.gz: a1fe20a4d14b170ccc8b10949868cf859382135651ec799bd1c0bfff4c588a5b92e63d7bf347cc0987feb4aa8199966e986b56d797d30828e9b01b3fb64cde72
6
+ metadata.gz: e3b1346dbdc4986e539fba595f18e01a46fd03d647210b34a6810e2bd9ae61028ffa00eae7e4e2c4088f524368a2cc74950f5d79610ab6aa2bd93d5c4cdd9e6a
7
+ data.tar.gz: 2196cc0fe1a16f2fd9ea4646eb7d07a227d58f07dc5f2cca3724c8ae4b08d4386adbdbc51f3364f2891745e7202b106348dabefed1734a6eb3b11c38823e4f17
@@ -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
@@ -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
- response = ::Net::HTTP.get_response(uri)
82
- # The Date object is passed through here due to a bug in
83
- # YAML#safe_load
84
- # https://github.com/ruby/psych/issues/262
85
- ::YAML
86
- .safe_load(response.body, [Date])
87
- .map { |release| release['version'] }
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
- return unless ::File.exist?('.ruby-version')
183
- ::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
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(YAML.safe_load(File.read(path), [Date]))
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 to_s
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
@@ -1,3 +1,3 @@
1
1
  module LibyearBundler
2
- VERSION = "0.6.0".freeze
2
+ VERSION = "0.7.0".freeze
3
3
  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
@@ -33,9 +33,6 @@ Gem::Specification.new do |spec|
33
33
  # above.
34
34
  spec.add_dependency "bundler", ">= 1.14", "< 3"
35
35
 
36
- spec.add_development_dependency "rspec", "~> 3.9"
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.6.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: 2021-08-13 00:00:00.000000000 Z
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
- rubyforge_project:
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