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 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