diff options
| author | Hiroshi SHIBATA <hsbt@ruby-lang.org> | 2026-05-07 18:44:50 +0900 |
|---|---|---|
| committer | git <svn-admin@ruby-lang.org> | 2026-05-08 06:43:38 +0000 |
| commit | e58a72eb5db505e5784a282d87d0d86df48bf789 (patch) | |
| tree | 3029a53df9766ae3b35ab1926f5d35e0ebac48fd | |
| parent | 13313f9436fb75e3da965a8ce8db9e4b96849111 (diff) | |
[ruby/rubygems] Accept required_ruby_version and required_rubygems_version overrides
Extend the override DSL whitelist so per-gem metadata fields can be
declared. The :all target is rejected for now with a "not yet
supported" error so the field is purely per-gem until the next step
adds :all propagation.
https://github.com/ruby/rubygems/commit/f9e4d7bf29
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
| -rw-r--r-- | lib/bundler/dsl.rb | 9 | ||||
| -rw-r--r-- | spec/bundler/bundler/dsl_spec.rb | 27 |
2 files changed, 31 insertions, 5 deletions
diff --git a/lib/bundler/dsl.rb b/lib/bundler/dsl.rb index 05eb493677..92abd07a84 100644 --- a/lib/bundler/dsl.rb +++ b/lib/bundler/dsl.rb @@ -185,7 +185,7 @@ module Bundler with_source(git_source) { yield } end - SUPPORTED_OVERRIDE_FIELDS = [:version].freeze + SUPPORTED_OVERRIDE_FIELDS = [:version, :required_ruby_version, :required_rubygems_version].freeze SUPPORTED_OVERRIDE_SYMBOL_OPERATIONS = [:ignore_upper].freeze def override(target, **operations) @@ -195,6 +195,10 @@ module Bundler raise ArgumentError, "`override :all, version:` is not allowed; version requirements are per-gem" end + if target == :all && operations.any? + raise ArgumentError, "`override :all` is not yet supported" + end + operations.each do |field, operation| validate_override_field!(field) validate_override_operation!(operation) @@ -274,7 +278,8 @@ module Bundler def validate_override_field!(field) return if SUPPORTED_OVERRIDE_FIELDS.include?(field) - raise ArgumentError, "unsupported override field `#{field}:`; only `version:` is currently supported" + supported = SUPPORTED_OVERRIDE_FIELDS.map {|f| "`#{f}:`" }.join(", ") + raise ArgumentError, "unsupported override field `#{field}:`; supported fields: #{supported}" end def validate_override_operation!(operation) diff --git a/spec/bundler/bundler/dsl_spec.rb b/spec/bundler/bundler/dsl_spec.rb index 99ab9088f9..6df665e3d9 100644 --- a/spec/bundler/bundler/dsl_spec.rb +++ b/spec/bundler/bundler/dsl_spec.rb @@ -425,8 +425,29 @@ RSpec.describe Bundler::Dsl do it "raises ArgumentError for an unsupported field" do expect do - subject.override("rails", required_ruby_version: :ignore_upper) - end.to raise_error(ArgumentError, /unsupported override field `required_ruby_version:`/) + subject.override("rails", as: "y") + end.to raise_error(ArgumentError, /unsupported override field `as:`/) + end + + it "stores an Override for a gem with a required_ruby_version: operation" do + subject.override("rails", required_ruby_version: :ignore_upper) + override = subject.overrides.first + expect(override.target).to eq("rails") + expect(override.field).to eq(:required_ruby_version) + expect(override.operation).to eq(:ignore_upper) + end + + it "stores an Override for a gem with a required_rubygems_version: operation" do + subject.override("rails", required_rubygems_version: nil) + override = subject.overrides.first + expect(override.field).to eq(:required_rubygems_version) + expect(override.operation).to be_nil + end + + it "raises ArgumentError for `override :all, required_ruby_version:` until :all is implemented" do + expect do + subject.override(:all, required_ruby_version: :ignore_upper) + end.to raise_error(ArgumentError, /`override :all` is not yet supported/) end it "raises ArgumentError for a non-string, non-symbol, non-nil operation" do @@ -456,7 +477,7 @@ RSpec.describe Bundler::Dsl do it "rejects atomically when one field in a multi-field call is invalid" do expect do - subject.override("rails", version: ">= 8.0", required_ruby_version: :ignore_upper) + subject.override("rails", version: ">= 8.0", as: "y") end.to raise_error(ArgumentError, /unsupported override field/) expect(subject.overrides).to eq([]) end |
