diff options
| -rw-r--r-- | lib/bundled_gems.rb | 9 | ||||
| -rw-r--r-- | test/test_bundled_gems.rb | 8 |
2 files changed, 11 insertions, 6 deletions
diff --git a/lib/bundled_gems.rb b/lib/bundled_gems.rb index 85f23b2596..403d80b48c 100644 --- a/lib/bundled_gems.rb +++ b/lib/bundled_gems.rb @@ -129,13 +129,10 @@ module Gem::BUNDLED_GEMS # :nodoc: return if specs.include?(name) # Don't warn if a hyphenated gem provides this feature - # (e.g., benchmark-ips provides benchmark/ips, not the benchmark gem) + # (e.g., benchmark-ips provides benchmark/ips, benchmark/timing, etc.) if subfeature - feature_parts = feature.split("/") - if feature_parts.size >= 2 - hyphenated_gem = "#{feature_parts[0]}-#{feature_parts[1]}" - return if specs.include?(hyphenated_gem) - end + prefix = feature.split("/").first + "-" + return if specs.any? { |spec, _| spec.start_with?(prefix) } end return if WARNED[name] diff --git a/test/test_bundled_gems.rb b/test/test_bundled_gems.rb index 6e25df9b01..e44c8348ad 100644 --- a/test/test_bundled_gems.rb +++ b/test/test_bundled_gems.rb @@ -39,6 +39,14 @@ class TestBundlerGem < Gem::TestCase assert_nil Gem::BUNDLED_GEMS.warning?("benchmark/ips", specs: {"benchmark-ips" => true}) end + def test_no_warning_for_subfeatures_of_hyphenated_gem + # When benchmark-ips gem is in specs, requiring any "benchmark/*" subfeature + # should not warn, since hyphenated gems may provide multiple files + # (e.g., benchmark-ips provides benchmark/ips, benchmark/timing, benchmark/compare) + assert_nil Gem::BUNDLED_GEMS.warning?("benchmark/timing", specs: {"benchmark-ips" => true}) + assert_nil Gem::BUNDLED_GEMS.warning?("benchmark/compare", specs: {"benchmark-ips" => true}) + end + def test_warning_without_hyphenated_gem # When benchmark-ips is NOT in specs, requiring "benchmark/ips" should warn warning = Gem::BUNDLED_GEMS.warning?("benchmark/ips", specs: {}) |
