rubygems-update 3.5.20 → 3.5.21
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +26 -0
- data/bundler/CHANGELOG.md +9 -0
- data/bundler/lib/bundler/build_metadata.rb +2 -2
- data/bundler/lib/bundler/inline.rb +11 -5
- data/bundler/lib/bundler/source/git/git_proxy.rb +4 -2
- data/bundler/lib/bundler/source/git.rb +1 -1
- data/bundler/lib/bundler/source/path.rb +2 -0
- data/bundler/lib/bundler/stub_specification.rb +2 -2
- data/bundler/lib/bundler/version.rb +1 -1
- data/bundler/lib/bundler.rb +29 -21
- data/lib/rubygems/command_manager.rb +2 -9
- data/lib/rubygems/commands/cleanup_command.rb +1 -11
- data/lib/rubygems/errors.rb +2 -1
- data/lib/rubygems/installer.rb +14 -23
- data/lib/rubygems/resolver/api_set.rb +12 -7
- data/lib/rubygems/resolver/best_set.rb +0 -2
- data/lib/rubygems/spec_fetcher.rb +4 -11
- data/lib/rubygems/specification.rb +2 -2
- data/lib/rubygems.rb +1 -1
- data/rubygems-update.gemspec +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b93fb693eb681ac96e283d9cbeaa13d051f7aad74a1c5345efdb2f3197bc3ffa
|
4
|
+
data.tar.gz: 891fe98e7164fd5e684ea15055f56ebeb041e9c316ba0528cb08346aa26032b8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 40183fff5ed0fc360dd8399691277c6f13f179d8bccadbc07d5008c189b63ed3b4eb7987214230f7cd720fbc9bbcae548fc14b5b6caddf635730c8f206651acb
|
7
|
+
data.tar.gz: 01cb679ca372d6856e928f71da3a991acd9f27cf526d1b650e33ccec7aa8d09ece5a2ff8a5dcbb02f11a7fa2923ee25042e2da52b42c452adc34c98770c1951b
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,29 @@
|
|
1
|
+
# 3.5.21 / 2024-10-03
|
2
|
+
|
3
|
+
## Enhancements:
|
4
|
+
|
5
|
+
* Fix `Gem::MissingSpecVersionError#to_s` not showing exception message.
|
6
|
+
Pull request [#8074](https://github.com/rubygems/rubygems/pull/8074) by
|
7
|
+
deivid-rodriguez
|
8
|
+
* Remove code that makes suggest_gems_from_name give worse results. Pull
|
9
|
+
request [#8083](https://github.com/rubygems/rubygems/pull/8083) by
|
10
|
+
duckinator
|
11
|
+
* Warning about PATH in `--user-install` mode is only necessary for gems
|
12
|
+
with executables. Pull request
|
13
|
+
[#8071](https://github.com/rubygems/rubygems/pull/8071) by
|
14
|
+
deivid-rodriguez
|
15
|
+
* Installs bundler 2.5.21 as a default gem.
|
16
|
+
|
17
|
+
## Bug fixes:
|
18
|
+
|
19
|
+
* Fix error in one source when fetching dependency APIs clearing results
|
20
|
+
from all sources. Pull request
|
21
|
+
[#8080](https://github.com/rubygems/rubygems/pull/8080) by
|
22
|
+
deivid-rodriguez
|
23
|
+
* Fix `gem cleanup` warning when two versions of psych installed. Pull
|
24
|
+
request [#8072](https://github.com/rubygems/rubygems/pull/8072) by
|
25
|
+
deivid-rodriguez
|
26
|
+
|
1
27
|
# 3.5.20 / 2024-09-24
|
2
28
|
|
3
29
|
## Enhancements:
|
data/bundler/CHANGELOG.md
CHANGED
@@ -1,3 +1,12 @@
|
|
1
|
+
# 2.5.21 (October 3, 2024)
|
2
|
+
|
3
|
+
## Bug fixes:
|
4
|
+
|
5
|
+
- Fix bug report template printed when changing a path source to a git source in frozen mode [#8079](https://github.com/rubygems/rubygems/pull/8079)
|
6
|
+
- Fix `stub.activated?` sometimes returning false after activation under bundler [#8073](https://github.com/rubygems/rubygems/pull/8073)
|
7
|
+
- Fix old cache format detection when application is not source controlled [#8076](https://github.com/rubygems/rubygems/pull/8076)
|
8
|
+
- Fix `bundler/inline` resetting ENV changes [#8059](https://github.com/rubygems/rubygems/pull/8059)
|
9
|
+
|
1
10
|
# 2.5.20 (September 24, 2024)
|
2
11
|
|
3
12
|
## Enhancements:
|
@@ -4,8 +4,8 @@ module Bundler
|
|
4
4
|
# Represents metadata from when the Bundler gem was built.
|
5
5
|
module BuildMetadata
|
6
6
|
# begin ivars
|
7
|
-
@built_at = "2024-
|
8
|
-
@git_commit_sha = "
|
7
|
+
@built_at = "2024-10-03".freeze
|
8
|
+
@git_commit_sha = "5cc66a2380b".freeze
|
9
9
|
@release = true
|
10
10
|
# end ivars
|
11
11
|
|
@@ -39,7 +39,11 @@ def gemfile(install = false, options = {}, &gemfile)
|
|
39
39
|
Bundler.ui = ui
|
40
40
|
raise ArgumentError, "Unknown options: #{opts.keys.join(", ")}" unless opts.empty?
|
41
41
|
|
42
|
-
|
42
|
+
old_gemfile = ENV["BUNDLE_GEMFILE"]
|
43
|
+
|
44
|
+
Bundler.unbundle_env!
|
45
|
+
|
46
|
+
begin
|
43
47
|
Bundler.instance_variable_set(:@bundle_path, Pathname.new(Gem.dir))
|
44
48
|
Bundler::SharedHelpers.set_env "BUNDLE_GEMFILE", "Gemfile"
|
45
49
|
|
@@ -80,9 +84,11 @@ def gemfile(install = false, options = {}, &gemfile)
|
|
80
84
|
|
81
85
|
runtime.require
|
82
86
|
end
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
+
ensure
|
88
|
+
if old_gemfile
|
89
|
+
ENV["BUNDLE_GEMFILE"] = old_gemfile
|
90
|
+
else
|
91
|
+
ENV["BUNDLE_GEMFILE"] = ""
|
92
|
+
end
|
87
93
|
end
|
88
94
|
end
|
@@ -84,8 +84,10 @@ module Bundler
|
|
84
84
|
end
|
85
85
|
end
|
86
86
|
|
87
|
-
def
|
88
|
-
|
87
|
+
def not_a_repository?
|
88
|
+
_, status = git_null("rev-parse", "--resolve-git-dir", path.to_s, dir: path)
|
89
|
+
|
90
|
+
!status.success?
|
89
91
|
end
|
90
92
|
|
91
93
|
def contains?(commit)
|
@@ -191,7 +191,7 @@ module Bundler
|
|
191
191
|
set_up_app_cache!(app_cache_path) if use_app_cache?
|
192
192
|
|
193
193
|
if requires_checkout? && !@copied
|
194
|
-
FileUtils.rm_rf(app_cache_path) if use_app_cache? && git_proxy.
|
194
|
+
FileUtils.rm_rf(app_cache_path) if use_app_cache? && git_proxy.not_a_repository?
|
195
195
|
|
196
196
|
fetch
|
197
197
|
checkout
|
data/bundler/lib/bundler.rb
CHANGED
@@ -383,28 +383,12 @@ module Bundler
|
|
383
383
|
|
384
384
|
# @return [Hash] Environment with all bundler-related variables removed
|
385
385
|
def unbundled_env
|
386
|
-
|
387
|
-
|
388
|
-
if env.key?("BUNDLER_ORIG_MANPATH")
|
389
|
-
env["MANPATH"] = env["BUNDLER_ORIG_MANPATH"]
|
390
|
-
end
|
391
|
-
|
392
|
-
env.delete_if {|k, _| k[0, 7] == "BUNDLE_" }
|
393
|
-
|
394
|
-
if env.key?("RUBYOPT")
|
395
|
-
rubyopt = env["RUBYOPT"].split(" ")
|
396
|
-
rubyopt.delete("-r#{File.expand_path("bundler/setup", __dir__)}")
|
397
|
-
rubyopt.delete("-rbundler/setup")
|
398
|
-
env["RUBYOPT"] = rubyopt.join(" ")
|
399
|
-
end
|
400
|
-
|
401
|
-
if env.key?("RUBYLIB")
|
402
|
-
rubylib = env["RUBYLIB"].split(File::PATH_SEPARATOR)
|
403
|
-
rubylib.delete(__dir__)
|
404
|
-
env["RUBYLIB"] = rubylib.join(File::PATH_SEPARATOR)
|
405
|
-
end
|
386
|
+
unbundle_env(original_env)
|
387
|
+
end
|
406
388
|
|
407
|
-
|
389
|
+
# Remove all bundler-related variables from ENV
|
390
|
+
def unbundle_env!
|
391
|
+
ENV.replace(unbundle_env(ENV))
|
408
392
|
end
|
409
393
|
|
410
394
|
# Run block with environment present before Bundler was activated
|
@@ -633,6 +617,30 @@ module Bundler
|
|
633
617
|
|
634
618
|
private
|
635
619
|
|
620
|
+
def unbundle_env(env)
|
621
|
+
if env.key?("BUNDLER_ORIG_MANPATH")
|
622
|
+
env["MANPATH"] = env["BUNDLER_ORIG_MANPATH"]
|
623
|
+
end
|
624
|
+
|
625
|
+
env.delete_if {|k, _| k[0, 7] == "BUNDLE_" }
|
626
|
+
env.delete("BUNDLER_SETUP")
|
627
|
+
|
628
|
+
if env.key?("RUBYOPT")
|
629
|
+
rubyopt = env["RUBYOPT"].split(" ")
|
630
|
+
rubyopt.delete("-r#{File.expand_path("bundler/setup", __dir__)}")
|
631
|
+
rubyopt.delete("-rbundler/setup")
|
632
|
+
env["RUBYOPT"] = rubyopt.join(" ")
|
633
|
+
end
|
634
|
+
|
635
|
+
if env.key?("RUBYLIB")
|
636
|
+
rubylib = env["RUBYLIB"].split(File::PATH_SEPARATOR)
|
637
|
+
rubylib.delete(__dir__)
|
638
|
+
env["RUBYLIB"] = rubylib.join(File::PATH_SEPARATOR)
|
639
|
+
end
|
640
|
+
|
641
|
+
env
|
642
|
+
end
|
643
|
+
|
636
644
|
def load_marshal(data, marshal_proc: nil)
|
637
645
|
Marshal.load(data, marshal_proc)
|
638
646
|
rescue TypeError => e
|
@@ -230,18 +230,11 @@ class Gem::CommandManager
|
|
230
230
|
def load_and_instantiate(command_name)
|
231
231
|
command_name = command_name.to_s
|
232
232
|
const_name = command_name.capitalize.gsub(/_(.)/) { $1.upcase } << "Command"
|
233
|
-
load_error = nil
|
234
233
|
|
235
234
|
begin
|
236
|
-
|
237
|
-
require "rubygems/commands/#{command_name}_command"
|
238
|
-
rescue LoadError => e
|
239
|
-
load_error = e
|
240
|
-
end
|
235
|
+
require "rubygems/commands/#{command_name}_command"
|
241
236
|
Gem::Commands.const_get(const_name).new
|
242
|
-
rescue StandardError => e
|
243
|
-
e = load_error if load_error
|
244
|
-
|
237
|
+
rescue StandardError, LoadError => e
|
245
238
|
alert_error clean_text("Loading command: #{command_name} (#{e.class})\n\t#{e}")
|
246
239
|
ui.backtrace e
|
247
240
|
end
|
@@ -38,8 +38,6 @@ class Gem::Commands::CleanupCommand < Gem::Command
|
|
38
38
|
@default_gems = []
|
39
39
|
@full = nil
|
40
40
|
@gems_to_cleanup = nil
|
41
|
-
@original_home = nil
|
42
|
-
@original_path = nil
|
43
41
|
@primary_gems = nil
|
44
42
|
end
|
45
43
|
|
@@ -95,9 +93,6 @@ If no gems are named all gems in GEM_HOME are cleaned.
|
|
95
93
|
end
|
96
94
|
|
97
95
|
def clean_gems
|
98
|
-
@original_home = Gem.dir
|
99
|
-
@original_path = Gem.path
|
100
|
-
|
101
96
|
get_primary_gems
|
102
97
|
get_candidate_gems
|
103
98
|
get_gems_to_cleanup
|
@@ -112,8 +107,6 @@ If no gems are named all gems in GEM_HOME are cleaned.
|
|
112
107
|
deps.reverse_each do |spec|
|
113
108
|
uninstall_dep spec
|
114
109
|
end
|
115
|
-
|
116
|
-
Gem::Specification.reset
|
117
110
|
end
|
118
111
|
|
119
112
|
def get_candidate_gems
|
@@ -133,7 +126,7 @@ If no gems are named all gems in GEM_HOME are cleaned.
|
|
133
126
|
|
134
127
|
default_gems, gems_to_cleanup = gems_to_cleanup.partition(&:default_gem?)
|
135
128
|
|
136
|
-
uninstall_from = options[:user_install] ? Gem.user_dir :
|
129
|
+
uninstall_from = options[:user_install] ? Gem.user_dir : Gem.dir
|
137
130
|
|
138
131
|
gems_to_cleanup = gems_to_cleanup.select do |spec|
|
139
132
|
spec.base_dir == uninstall_from
|
@@ -181,8 +174,5 @@ If no gems are named all gems in GEM_HOME are cleaned.
|
|
181
174
|
say "Unable to uninstall #{spec.full_name}:"
|
182
175
|
say "\t#{e.class}: #{e.message}"
|
183
176
|
end
|
184
|
-
ensure
|
185
|
-
# Restore path Gem::Uninstaller may have changed
|
186
|
-
Gem.use_paths @original_home, *@original_path
|
187
177
|
end
|
188
178
|
end
|
data/lib/rubygems/errors.rb
CHANGED
@@ -30,6 +30,7 @@ module Gem
|
|
30
30
|
@name = name
|
31
31
|
@requirement = requirement
|
32
32
|
@extra_message = extra_message
|
33
|
+
super(message)
|
33
34
|
end
|
34
35
|
|
35
36
|
def message # :nodoc:
|
@@ -53,8 +54,8 @@ module Gem
|
|
53
54
|
attr_reader :specs
|
54
55
|
|
55
56
|
def initialize(name, requirement, specs)
|
56
|
-
super(name, requirement)
|
57
57
|
@specs = specs
|
58
|
+
super(name, requirement)
|
58
59
|
end
|
59
60
|
|
60
61
|
private
|
data/lib/rubygems/installer.rb
CHANGED
@@ -66,8 +66,6 @@ class Gem::Installer
|
|
66
66
|
|
67
67
|
attr_reader :package
|
68
68
|
|
69
|
-
@path_warning = false
|
70
|
-
|
71
69
|
class << self
|
72
70
|
#
|
73
71
|
# Changes in rubygems to lazily loading `rubygems/command` (in order to
|
@@ -86,11 +84,6 @@ class Gem::Installer
|
|
86
84
|
super(klass)
|
87
85
|
end
|
88
86
|
|
89
|
-
##
|
90
|
-
# True if we've warned about PATH not including Gem.bindir
|
91
|
-
|
92
|
-
attr_accessor :path_warning
|
93
|
-
|
94
87
|
##
|
95
88
|
# Overrides the executable format.
|
96
89
|
#
|
@@ -188,15 +181,6 @@ class Gem::Installer
|
|
188
181
|
@package.dir_mode = options[:dir_mode]
|
189
182
|
@package.prog_mode = options[:prog_mode]
|
190
183
|
@package.data_mode = options[:data_mode]
|
191
|
-
|
192
|
-
if @gem_home == Gem.user_dir
|
193
|
-
# If we get here, then one of the following likely happened:
|
194
|
-
# - `--user-install` was specified
|
195
|
-
# - `Gem::PathSupport#home` fell back to `Gem.user_dir`
|
196
|
-
# - GEM_HOME was manually set to `Gem.user_dir`
|
197
|
-
|
198
|
-
check_that_user_bin_dir_is_in_path
|
199
|
-
end
|
200
184
|
end
|
201
185
|
|
202
186
|
##
|
@@ -488,11 +472,21 @@ class Gem::Installer
|
|
488
472
|
end
|
489
473
|
|
490
474
|
def generate_bin # :nodoc:
|
491
|
-
|
475
|
+
executables = spec.executables
|
476
|
+
return if executables.nil? || executables.empty?
|
477
|
+
|
478
|
+
if @gem_home == Gem.user_dir
|
479
|
+
# If we get here, then one of the following likely happened:
|
480
|
+
# - `--user-install` was specified
|
481
|
+
# - `Gem::PathSupport#home` fell back to `Gem.user_dir`
|
482
|
+
# - GEM_HOME was manually set to `Gem.user_dir`
|
483
|
+
|
484
|
+
check_that_user_bin_dir_is_in_path(executables)
|
485
|
+
end
|
492
486
|
|
493
487
|
ensure_writable_dir @bin_dir
|
494
488
|
|
495
|
-
|
489
|
+
executables.each do |filename|
|
496
490
|
bin_path = File.join gem_dir, spec.bindir, filename
|
497
491
|
next unless File.exist? bin_path
|
498
492
|
|
@@ -694,9 +688,7 @@ class Gem::Installer
|
|
694
688
|
end
|
695
689
|
end
|
696
690
|
|
697
|
-
def check_that_user_bin_dir_is_in_path # :nodoc:
|
698
|
-
return if self.class.path_warning
|
699
|
-
|
691
|
+
def check_that_user_bin_dir_is_in_path(executables) # :nodoc:
|
700
692
|
user_bin_dir = @bin_dir || Gem.bindir(gem_home)
|
701
693
|
user_bin_dir = user_bin_dir.tr(File::ALT_SEPARATOR, File::SEPARATOR) if File::ALT_SEPARATOR
|
702
694
|
|
@@ -712,8 +704,7 @@ class Gem::Installer
|
|
712
704
|
|
713
705
|
unless path.include? user_bin_dir
|
714
706
|
unless !Gem.win_platform? && (path.include? user_bin_dir.sub(ENV["HOME"], "~"))
|
715
|
-
alert_warning "You don't have #{user_bin_dir} in your PATH,\n\t gem executables will not run."
|
716
|
-
self.class.path_warning = true
|
707
|
+
alert_warning "You don't have #{user_bin_dir} in your PATH,\n\t gem executables (#{executables.join(", ")}) will not run."
|
717
708
|
end
|
718
709
|
end
|
719
710
|
end
|
@@ -104,16 +104,21 @@ class Gem::Resolver::APISet < Gem::Resolver::Set
|
|
104
104
|
end
|
105
105
|
|
106
106
|
uri = @dep_uri + name
|
107
|
-
str = Gem::RemoteFetcher.fetcher.fetch_path uri
|
108
107
|
|
109
|
-
|
110
|
-
|
108
|
+
begin
|
109
|
+
str = Gem::RemoteFetcher.fetcher.fetch_path uri
|
110
|
+
rescue Gem::RemoteFetcher::FetchError
|
111
|
+
@data[name] = []
|
112
|
+
else
|
113
|
+
lines(str).each do |ver|
|
114
|
+
number, platform, dependencies, requirements = parse_gem(ver)
|
111
115
|
|
112
|
-
|
113
|
-
|
114
|
-
|
116
|
+
platform ||= "ruby"
|
117
|
+
dependencies = dependencies.map {|dep_name, reqs| [dep_name, reqs.join(", ")] }
|
118
|
+
requirements = requirements.map {|req_name, reqs| [req_name.to_sym, reqs] }.to_h
|
115
119
|
|
116
|
-
|
120
|
+
@data[name] << { name: name, number: number, platform: platform, dependencies: dependencies, requirements: requirements }
|
121
|
+
end
|
117
122
|
end
|
118
123
|
|
119
124
|
@data[name]
|
@@ -176,19 +176,12 @@ class Gem::SpecFetcher
|
|
176
176
|
|
177
177
|
matches = names.map do |n|
|
178
178
|
next unless n.match_platform?
|
179
|
-
|
179
|
+
distance = levenshtein_distance gem_name, n.name.downcase.tr("_-", "")
|
180
|
+
next if distance >= max
|
181
|
+
return [n.name] if distance == 0
|
182
|
+
[n.name, distance]
|
180
183
|
end.compact
|
181
184
|
|
182
|
-
if matches.length < num_results
|
183
|
-
matches += names.map do |n|
|
184
|
-
next unless n.match_platform?
|
185
|
-
distance = levenshtein_distance gem_name, n.name.downcase.tr("_-", "")
|
186
|
-
next if distance >= max
|
187
|
-
return [n.name] if distance == 0
|
188
|
-
[n.name, distance]
|
189
|
-
end.compact
|
190
|
-
end
|
191
|
-
|
192
185
|
matches = if matches.empty? && type != :prerelease
|
193
186
|
suggest_gems_from_name gem_name, :prerelease
|
194
187
|
else
|
@@ -1208,7 +1208,7 @@ class Gem::Specification < Gem::BasicSpecification
|
|
1208
1208
|
unresolved.values.each do |dep|
|
1209
1209
|
warn " #{dep}"
|
1210
1210
|
|
1211
|
-
versions = find_all_by_name(dep.name)
|
1211
|
+
versions = find_all_by_name(dep.name).uniq(&:full_name)
|
1212
1212
|
unless versions.empty?
|
1213
1213
|
warn " Available/installed versions of this gem:"
|
1214
1214
|
versions.each {|s| warn " - #{s.version}" }
|
@@ -1412,7 +1412,7 @@ class Gem::Specification < Gem::BasicSpecification
|
|
1412
1412
|
end
|
1413
1413
|
|
1414
1414
|
begin
|
1415
|
-
specs = spec_dep.to_specs
|
1415
|
+
specs = spec_dep.to_specs.uniq(&:full_name)
|
1416
1416
|
rescue Gem::MissingSpecError => e
|
1417
1417
|
raise Gem::MissingSpecError.new(e.name, e.requirement, "at: #{spec_file}")
|
1418
1418
|
end
|
data/lib/rubygems.rb
CHANGED
data/rubygems-update.gemspec
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = "rubygems-update"
|
5
|
-
s.version = "3.5.
|
5
|
+
s.version = "3.5.21"
|
6
6
|
s.authors = ["Jim Weirich", "Chad Fowler", "Eric Hodel", "Luis Lavena", "Aaron Patterson", "Samuel Giddins", "André Arko", "Evan Phoenix", "Hiroshi SHIBATA"]
|
7
7
|
s.email = ["", "", "drbrain@segment7.net", "luislavena@gmail.com", "aaron@tenderlovemaking.com", "segiddins@segiddins.me", "andre@arko.net", "evan@phx.io", "hsbt@ruby-lang.org"]
|
8
8
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rubygems-update
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.5.
|
4
|
+
version: 3.5.21
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jim Weirich
|
@@ -16,7 +16,7 @@ authors:
|
|
16
16
|
autorequire:
|
17
17
|
bindir: exe
|
18
18
|
cert_chain: []
|
19
|
-
date: 2024-
|
19
|
+
date: 2024-10-03 00:00:00.000000000 Z
|
20
20
|
dependencies: []
|
21
21
|
description: |-
|
22
22
|
A package (also known as a library) contains a set of functionality
|
@@ -737,7 +737,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
737
737
|
- !ruby/object:Gem::Version
|
738
738
|
version: '0'
|
739
739
|
requirements: []
|
740
|
-
rubygems_version: 3.5.
|
740
|
+
rubygems_version: 3.5.21
|
741
741
|
signing_key:
|
742
742
|
specification_version: 4
|
743
743
|
summary: RubyGems is a package management framework for Ruby. This gem is downloaded
|