diff options
| author | Brandon Weaver <keystonelemur@gmail.com> | 2025-11-08 19:37:32 -0800 |
|---|---|---|
| committer | git <svn-admin@ruby-lang.org> | 2025-11-14 06:32:36 +0000 |
| commit | dabc86a5f305f09708df5a2476ce468b26a75b00 (patch) | |
| tree | 97da7a9cdd3e573517a95173d981aec7816e953c | |
| parent | 068b35ce3d85927765f8b448ecc6f2e866d2b9b7 (diff) | |
[ruby/rubygems] Add pattern matching support to Gem::NameTuple
https://github.com/ruby/rubygems/commit/9b19e1f555
| -rw-r--r-- | lib/rubygems/name_tuple.rb | 6 | ||||
| -rw-r--r-- | test/rubygems/test_gem_name_tuple.rb | 37 |
2 files changed, 43 insertions, 0 deletions
diff --git a/lib/rubygems/name_tuple.rb b/lib/rubygems/name_tuple.rb index 67c6f30a3d..cbdf4d7ac5 100644 --- a/lib/rubygems/name_tuple.rb +++ b/lib/rubygems/name_tuple.rb @@ -81,6 +81,12 @@ class Gem::NameTuple [@name, @version, @platform] end + alias_method :deconstruct, :to_a + + def deconstruct_keys(keys) + { name: @name, version: @version, platform: @platform } + end + def inspect # :nodoc: "#<Gem::NameTuple #{@name}, #{@version}, #{@platform}>" end diff --git a/test/rubygems/test_gem_name_tuple.rb b/test/rubygems/test_gem_name_tuple.rb index bdb8181ce8..4876737c83 100644 --- a/test/rubygems/test_gem_name_tuple.rb +++ b/test/rubygems/test_gem_name_tuple.rb @@ -57,4 +57,41 @@ class TestGemNameTuple < Gem::TestCase assert_equal 1, a_p.<=>(a) end + + def test_deconstruct + name_tuple = Gem::NameTuple.new "rails", Gem::Version.new("7.0.0"), "ruby" + assert_equal ["rails", Gem::Version.new("7.0.0"), "ruby"], name_tuple.deconstruct + end + + def test_deconstruct_keys + name_tuple = Gem::NameTuple.new "rails", Gem::Version.new("7.0.0"), "x86_64-linux" + keys = name_tuple.deconstruct_keys(nil) + assert_equal "rails", keys[:name] + assert_equal Gem::Version.new("7.0.0"), keys[:version] + assert_equal "x86_64-linux", keys[:platform] + end + + def test_pattern_matching_array + name_tuple = Gem::NameTuple.new "rails", Gem::Version.new("7.0.0"), "ruby" + result = + case name_tuple + in [name, version, "ruby"] + "#{name}-#{version}" + else + "no match" + end + assert_equal "rails-7.0.0", result + end + + def test_pattern_matching_hash + name_tuple = Gem::NameTuple.new "rails", Gem::Version.new("7.0.0"), "ruby" + result = + case name_tuple + in name: "rails", version:, platform: "ruby" + version.to_s + else + "no match" + end + assert_equal "7.0.0", result + end end |
