libyear-bundler 0.9.0 → 0.9.1

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: 0423ad3e6d453baa3bc6bc93e49a3aa72fa7918a81d6b2403fb6546a8d078193
4
- data.tar.gz: 56e00c648efe514f290533f33921d1da2b3c460702721a6b402b03c09a953813
3
+ metadata.gz: '0598b786c916a1f5645f5785f9e71b7dee517a908abd24410ebd5c9262e1681a'
4
+ data.tar.gz: 78396f8f657749c1206f76b7ab7d47a1ed6f182f9aefcba0ed478dfa72b3a83d
5
5
  SHA512:
6
- metadata.gz: 694fbd117515873bacb006cac6f10442170c7439b82ea861dcd02e56128589d8c88e38c3cef1b09e9eff93e4c938c50e900a8845f1e09a8e87376e5dac2a4e9f
7
- data.tar.gz: ef72774c6db0dbb48ae72ec3c0ff52bc56912aa7915637843db8bc7b7608db188232f3dab1da308f714312e552da1e4c955f54fba6061e45d64b7e60b42f5798
6
+ metadata.gz: 8a9c45f47f10127b72ee0bfc4a38d52e3fff677b55d93d8f125730b5a3bf1f9a8920590667465af4388ad14cbeda33c37852a51729497a0740d003b326057797
7
+ data.tar.gz: 38610ebd31b56aa6173b2ff861756fa602bbefe63855de0ec4d21d2940e0292278ae3f82ad2ff08633813ffce7c890b88a8a20341962f54b3354f5c4e599c03c
@@ -17,21 +17,25 @@ module LibyearBundler
17
17
  end
18
18
 
19
19
  def execute
20
- bundle_outdated.lines.each_with_object([]) do |line, gems|
21
- match = BOP_FMT.match(line)
22
- next if match.nil?
23
- if malformed_version_strings?(match)
24
- warn "Skipping #{match['name']} because of a malformed version string"
25
- next
26
- end
20
+ uri = URI('https://rubygems.org')
21
+ Net::HTTP.start(uri.host, uri.port, use_ssl: true) do |http|
22
+ bundle_outdated.lines.each_with_object([]) do |line, gems|
23
+ match = BOP_FMT.match(line)
24
+ next if match.nil?
25
+ if malformed_version_strings?(match)
26
+ warn "Skipping #{match['name']} because of a malformed version string"
27
+ next
28
+ end
27
29
 
28
- gem = ::LibyearBundler::Models::Gem.new(
29
- match['name'],
30
- match['installed'],
31
- match['newest'],
32
- @release_date_cache
33
- )
34
- gems.push(gem)
30
+ gem = ::LibyearBundler::Models::Gem.new(
31
+ match['name'],
32
+ match['installed'],
33
+ match['newest'],
34
+ @release_date_cache,
35
+ http
36
+ )
37
+ gems.push(gem)
38
+ end
35
39
  end
36
40
  end
37
41
 
@@ -7,7 +7,7 @@ module LibyearBundler
7
7
  # Logic and information pertaining to the installed and newest versions of
8
8
  # a gem
9
9
  class Gem
10
- def initialize(name, installed_version, newest_version, release_date_cache)
10
+ def initialize(name, installed_version, newest_version, release_date_cache, http)
11
11
  unless release_date_cache.nil? || release_date_cache.is_a?(ReleaseDateCache)
12
12
  raise TypeError, 'Invalid release_date_cache'
13
13
  end
@@ -15,29 +15,28 @@ module LibyearBundler
15
15
  @installed_version = installed_version
16
16
  @newest_version = newest_version
17
17
  @release_date_cache = release_date_cache
18
+ @http = http
18
19
  end
19
20
 
20
21
  class << self
21
- def release_date(gem_name, gem_version)
22
- dep = nil
23
- begin
24
- dep = ::Bundler::Dependency.new(gem_name, gem_version)
25
- rescue ::Gem::Requirement::BadRequirementError => e
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
31
- return nil
22
+ def release_date(gem_name, gem_version, http)
23
+ uri = URI.parse(
24
+ "https://rubygems.org/api/v2/rubygems/#{gem_name}/versions/#{gem_version}.json"
25
+ )
26
+ request = Net::HTTP::Get.new(uri)
27
+ response = http.request(request)
28
+ if response.is_a?(Net::HTTPSuccess)
29
+ parsed_response = JSON.parse(response.body)
30
+ Date.parse(parsed_response["version_created_at"])
31
+ else
32
+ report_problem(
33
+ gem_name,
34
+ "Release date not found: #{gem_name}: rubygems.org responded with #{response.code}"
35
+ )
36
+ nil
32
37
  end
33
- tuples, _errors = ::Gem::SpecFetcher.fetcher.search_for_dependency(dep)
34
- if tuples.empty?
35
- report_problem(gem_name, "Could not find release date for: #{gem_name}")
36
- return nil
37
- end
38
- tup, source = tuples.first # Gem::NameTuple
39
- spec = source.fetch_spec(tup) # raises Gem::RemoteFetcher::FetchError
40
- spec.date.to_date
38
+ rescue StandardError => e
39
+ report_problem(gem_name, "Release date not found: #{gem_name}: #{e.inspect}")
41
40
  end
42
41
 
43
42
  private
@@ -57,7 +56,7 @@ Maybe you used git in your Gemfile, which libyear doesn't support yet. Contribut
57
56
 
58
57
  def installed_version_release_date
59
58
  if @release_date_cache.nil?
60
- self.class.release_date(name, installed_version)
59
+ self.class.release_date(name, installed_version, @http)
61
60
  else
62
61
  @release_date_cache[name, installed_version]
63
62
  end
@@ -88,7 +87,7 @@ Maybe you used git in your Gemfile, which libyear doesn't support yet. Contribut
88
87
 
89
88
  def newest_version_release_date
90
89
  if @release_date_cache.nil?
91
- self.class.release_date(name, newest_version)
90
+ self.class.release_date(name, newest_version, @http)
92
91
  else
93
92
  @release_date_cache[name, newest_version]
94
93
  end
@@ -115,7 +114,8 @@ Maybe you used git in your Gemfile, which libyear doesn't support yet. Contribut
115
114
  def versions_sequence
116
115
  @_versions_sequence ||= begin
117
116
  uri = URI.parse("https://rubygems.org/api/v1/versions/#{name}.json")
118
- response = Net::HTTP.get_response(uri)
117
+ request = Net::HTTP::Get.new(uri)
118
+ response = @http.request(request)
119
119
  parsed_response = JSON.parse(response.body)
120
120
  parsed_response.map { |version| version['number'] }
121
121
  end
@@ -1,7 +1,6 @@
1
1
  require 'optparse'
2
2
  require 'libyear_bundler/version'
3
3
  require "libyear_bundler/cli"
4
- require 'ostruct'
5
4
 
6
5
  module LibyearBundler
7
6
  # Uses OptionParser from Ruby's stdlib to hand command-line arguments
@@ -11,14 +10,18 @@ Usage: libyear-bundler [Gemfile ...] [options]
11
10
  https://github.com/jaredbeck/libyear-bundler/
12
11
  BANNER
13
12
 
13
+ Store = Struct.new(
14
+ :libyears?, :releases?, :versions?, :cache_path, :grand_total?, :sort?, :json?
15
+ )
16
+
14
17
  def initialize(argv)
15
18
  @argv = argv
16
- @options = ::OpenStruct.new
19
+ @options = Store.new
17
20
  @optparser = OptionParser.new do |opts|
18
21
  opts.banner = BANNER
19
22
  opts.program_name = 'libyear-bundler'
20
23
  opts.version = ::LibyearBundler::VERSION
21
- @options.send('libyears?=', true)
24
+ @options.send(:'libyears?=', true)
22
25
 
23
26
  opts.on_head('-h', '--help', 'Prints this help') do
24
27
  puts opts
@@ -26,9 +29,9 @@ https://github.com/jaredbeck/libyear-bundler/
26
29
  end
27
30
 
28
31
  opts.on('--all', 'Calculate all metrics') do
29
- @options.send('libyears?=', true)
30
- @options.send('releases?=', true)
31
- @options.send('versions?=', true)
32
+ @options.send(:'libyears?=', true)
33
+ @options.send(:'releases?=', true)
34
+ @options.send(:'versions?=', true)
32
35
  end
33
36
 
34
37
  opts.on('--cache=CACHE_PATH', 'Use a cache across runs') do |cache_path|
@@ -36,29 +39,29 @@ https://github.com/jaredbeck/libyear-bundler/
36
39
  end
37
40
 
38
41
  opts.on('--libyears', '[default] Calculate libyears out-of-date') do
39
- @options.send('libyears?=', true)
42
+ @options.send(:'libyears?=', true)
40
43
  end
41
44
 
42
45
  opts.on('--releases', 'Calculate number of releases out-of-date') do
43
- @options.send('libyears?=', false)
44
- @options.send('releases?=', true)
46
+ @options.send(:'libyears?=', false)
47
+ @options.send(:'releases?=', true)
45
48
  end
46
49
 
47
50
  opts.on('--versions', 'Calculate major, minor, and patch versions out-of-date') do
48
- @options.send('libyears?=', false)
49
- @options.send('versions?=', true)
51
+ @options.send(:'libyears?=', false)
52
+ @options.send(:'versions?=', true)
50
53
  end
51
54
 
52
55
  opts.on('--grand-total', 'Return value for given metric(s)') do
53
- @options.send('grand_total?=', true)
56
+ @options.send(:'grand_total?=', true)
54
57
  end
55
58
 
56
59
  opts.on('--sort', 'Sort by selected metric(s), in descending order') do
57
- @options.send('sort?=', true)
60
+ @options.send(:'sort?=', true)
58
61
  end
59
62
 
60
63
  opts.on('--json', 'Output JSON') do
61
- @options.send('json?=', true)
64
+ @options.send(:'json?=', true)
62
65
  end
63
66
  end
64
67
  end
@@ -8,6 +8,8 @@ module LibyearBundler
8
8
  def initialize(data)
9
9
  raise TypeError unless data.is_a?(Hash)
10
10
  @data = data
11
+ uri = URI('https://rubygems.org')
12
+ @http = Net::HTTP.start(uri.host, uri.port, use_ssl: true)
11
13
  end
12
14
 
13
15
  def [](name, version)
@@ -52,7 +54,7 @@ module LibyearBundler
52
54
  if name == 'ruby'
53
55
  Models::Ruby.release_date(version)
54
56
  else
55
- Models::Gem.release_date(name, version)
57
+ Models::Gem.release_date(name, version, @http)
56
58
  end
57
59
  end
58
60
  end
@@ -1,3 +1,3 @@
1
1
  module LibyearBundler
2
- VERSION = "0.9.0".freeze
2
+ VERSION = "0.9.1".freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: libyear-bundler
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.0
4
+ version: 0.9.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jared Beck
8
- autorequire:
9
8
  bindir: bin
10
9
  cert_chain: []
11
- date: 2025-03-05 00:00:00.000000000 Z
10
+ date: 2025-10-09 00:00:00.000000000 Z
12
11
  dependencies:
13
12
  - !ruby/object:Gem::Dependency
14
13
  name: bundler
@@ -30,7 +29,6 @@ dependencies:
30
29
  - - "<"
31
30
  - !ruby/object:Gem::Version
32
31
  version: '3'
33
- description:
34
32
  email:
35
33
  - jared@jaredbeck.com
36
34
  executables:
@@ -60,7 +58,6 @@ homepage: https://libyear.com
60
58
  licenses:
61
59
  - GPL-3.0-only
62
60
  metadata: {}
63
- post_install_message:
64
61
  rdoc_options: []
65
62
  require_paths:
66
63
  - lib
@@ -75,8 +72,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
75
72
  - !ruby/object:Gem::Version
76
73
  version: '0'
77
74
  requirements: []
78
- rubygems_version: 3.2.20
79
- signing_key:
75
+ rubygems_version: 3.6.2
80
76
  specification_version: 4
81
77
  summary: A simple measure of dependency freshness
82
78
  test_files: []