diff --git a/Library/Homebrew/formula.rb b/Library/Homebrew/formula.rb index 5e3c5eff1d..d5c9730fb0 100644 --- a/Library/Homebrew/formula.rb +++ b/Library/Homebrew/formula.rb @@ -2924,8 +2924,13 @@ class Formula def pour_bottle?(reason: nil, &block) @pour_bottle_check = PourBottleCheck.new(self) - if reason == :clt_required - block = lambda do |_| + if reason.present? && block.present? + raise ArgumentError, "Do not pass both a reason and a block to `pour_bottle?`" + end + + block ||= case reason + when :clt_required + lambda do |_| on_macos do T.cast(self, PourBottleCheck).reason(+<<~EOS) The bottle needs the Apple Command Line Tools to be installed. @@ -2935,6 +2940,8 @@ class Formula T.cast(self, PourBottleCheck).satisfy { MacOS::CLT.installed? } end end + else + raise ArgumentError, "Invalid `pour_bottle?` reason" if reason.present? end @pour_bottle_check.instance_eval(&block) diff --git a/Library/Homebrew/test/formula_spec.rb b/Library/Homebrew/test/formula_spec.rb index eb10500162..3cf2db1aa8 100644 --- a/Library/Homebrew/test/formula_spec.rb +++ b/Library/Homebrew/test/formula_spec.rb @@ -1021,6 +1021,29 @@ describe Formula do expect(f).to pour_bottle end + + it "throws an error if passed both a symbol and a block" do + expect do + formula "foo" do + url "foo-1.0" + + pour_bottle? reason: :clt_required do + reason "true reason" + satisfy { true } + end + end + end.to raise_error(ArgumentError, "Do not pass both a reason and a block to `pour_bottle?`") + end + + it "throws an error if passed an invalid symbol" do + expect do + formula "foo" do + url "foo-1.0" + + pour_bottle? reason: :foo + end + end.to raise_error(ArgumentError, "Invalid `pour_bottle?` reason") + end end describe "alias changes" do