From bab809d98f2a0a8a23efd62df750beccbf1b35d9 Mon Sep 17 00:00:00 2001 From: Hiroshi SHIBATA Date: Fri, 3 Mar 2023 16:30:39 +0900 Subject: [PATCH] [rubygems/rubygems] Introduce Gem::Specification.find_by_full_name for finding conbination of name and version for gemspec https://github.com/rubygems/rubygems/commit/0430551215 --- lib/rubygems/specification.rb | 6 ++++++ test/rubygems/test_gem_specification.rb | 17 +++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/lib/rubygems/specification.rb b/lib/rubygems/specification.rb index 01798fb8a2..d4640c12f0 100644 --- a/lib/rubygems/specification.rb +++ b/lib/rubygems/specification.rb @@ -1021,6 +1021,12 @@ class Gem::Specification < Gem::BasicSpecification Gem::Dependency.new(name, *requirements).to_spec end + ## + # Find the best specification matching a +full_name+. + def self.find_by_full_name(full_name) + stubs.find {|s| s.full_name == full_name }&.to_spec + end + ## # Return the best specification that contains the file matching +path+. diff --git a/test/rubygems/test_gem_specification.rb b/test/rubygems/test_gem_specification.rb index 1952192aba..56ca7acaf2 100644 --- a/test/rubygems/test_gem_specification.rb +++ b/test/rubygems/test_gem_specification.rb @@ -3726,6 +3726,23 @@ end assert Gem::Specification.find_by_name "b", ">1" end + def test_find_by_full_name + pl = Gem::Platform.new "x86_64-linux" + + a = util_spec "a", "1" + install_specs a + + a_pl = util_spec("a", "1") {|s| s.platform = pl } + install_specs a_pl + + assert_equal a, Gem::Specification.find_by_full_name("a-1") + assert_equal a_pl, Gem::Specification.find_by_full_name("a-1-x86_64-linux") + + assert_nil Gem::Specification.find_by_full_name("a-2") + assert_nil Gem::Specification.find_by_full_name("b-1") + assert_nil Gem::Specification.find_by_full_name("a-1-arm64-linux") + end + def test_find_by_path a = util_spec "foo", "1", nil, "lib/foo.rb"