From e186cebe420367947b89a5221491429452d724d5 Mon Sep 17 00:00:00 2001 From: Martin Emde Date: Fri, 8 Dec 2023 12:13:49 -0800 Subject: [PATCH] [rubygems/rubygems] Override initialize in bundle rubygems_ext for NameTuple https://github.com/rubygems/rubygems/commit/f63ce682d2 --- lib/bundler/rubygems_ext.rb | 15 ++++++++++----- spec/bundler/other/ext_spec.rb | 20 ++++++++++++++++++++ 2 files changed, 30 insertions(+), 5 deletions(-) diff --git a/lib/bundler/rubygems_ext.rb b/lib/bundler/rubygems_ext.rb index c1daf3ced8..62a9426a72 100644 --- a/lib/bundler/rubygems_ext.rb +++ b/lib/bundler/rubygems_ext.rb @@ -352,11 +352,16 @@ module Gem require "rubygems/name_tuple" class NameTuple - def self.new(name, version, platform="ruby") - if Gem::Platform === platform - super(name, version, platform.to_s) - else - super + # Versions of RubyGems before about 3.5.0 don't to_s the platform. + unless Gem::NameTuple.new("a", Gem::Version.new("1"), Gem::Platform.new("x86_64-linux")).platform.is_a?(String) + alias_method :initialize_with_platform, :initialize + + def initialize(name, version, platform=Gem::Platform::RUBY) + if Gem::Platform === platform + initialize_with_platform(name, version, platform.to_s) + else + initialize_with_platform(name, version, platform) + end end end diff --git a/spec/bundler/other/ext_spec.rb b/spec/bundler/other/ext_spec.rb index 4d6ee2edf8..4d954b474f 100644 --- a/spec/bundler/other/ext_spec.rb +++ b/spec/bundler/other/ext_spec.rb @@ -63,3 +63,23 @@ RSpec.describe "Gem::SourceIndex#refresh!" do run "Gem::SourceIndex.new([]).refresh!", raise_on_error: false end end + +RSpec.describe "Gem::NameTuple" do + describe "#initialize" do + it "creates a Gem::NameTuple with equality regardless of platform type" do + gem_platform = Gem::NameTuple.new "a", v("1"), pl("x86_64-linux") + str_platform = Gem::NameTuple.new "a", v("1"), "x86_64-linux" + expect(gem_platform).to eq(str_platform) + expect(gem_platform.hash).to eq(str_platform.hash) + expect(gem_platform.to_a).to eq(str_platform.to_a) + end + end + + describe "#lock_name" do + it "returns the lock name" do + expect(Gem::NameTuple.new("a", v("1.0.0"), pl("x86_64-linux")).lock_name).to eq("a (1.0.0-x86_64-linux)") + expect(Gem::NameTuple.new("a", v("1.0.0"), "ruby").lock_name).to eq("a (1.0.0)") + expect(Gem::NameTuple.new("a", v("1.0.0")).lock_name).to eq("a (1.0.0)") + end + end +end