summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHiroshi SHIBATA <hsbt@ruby-lang.org>2026-05-07 18:44:50 +0900
committergit <svn-admin@ruby-lang.org>2026-05-08 06:43:38 +0000
commite58a72eb5db505e5784a282d87d0d86df48bf789 (patch)
tree3029a53df9766ae3b35ab1926f5d35e0ebac48fd
parent13313f9436fb75e3da965a8ce8db9e4b96849111 (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.rb9
-rw-r--r--spec/bundler/bundler/dsl_spec.rb27
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