summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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