From 08c927b6a17fa36368e389d552fa8bb3f9240611 Mon Sep 17 00:00:00 2001 From: Sam Ford <1584702+samford@users.noreply.github.com> Date: Sun, 8 Dec 2024 12:22:57 -0500 Subject: [PATCH] Json: Allow nil regex block argument This updates the block-handling logic in `Json::versions_from_content` to naively pass the regex value when the block has two parameters. Up to now, we have been ensuring that `regex` is not `nil` and this makes sense with existing usage (the `Crate` strategy's default block, formulae/cask `strategy` blocks). However, we need to allow a `nil` `regex` value to make it possible to add an optional `regex` parameter in the `Pypi::DEFAULT_BLOCK` Proc. This is necessary to allow the `Pypi` strategy to work with an optional regex from a `livecheck` block again [without creating an additional `DEFAULT_BLOCK` variant with a regex parameter]. --- Library/Homebrew/livecheck/strategy/json.rb | 10 +++++----- Library/Homebrew/test/livecheck/strategy/json_spec.rb | 5 ----- 2 files changed, 5 insertions(+), 10 deletions(-) diff --git a/Library/Homebrew/livecheck/strategy/json.rb b/Library/Homebrew/livecheck/strategy/json.rb index a4631c58e2..b8f05e29ae 100644 --- a/Library/Homebrew/livecheck/strategy/json.rb +++ b/Library/Homebrew/livecheck/strategy/json.rb @@ -58,8 +58,10 @@ module Homebrew end # Parses JSON text and identifies versions using a `strategy` block. - # If a regex is provided, it will be passed as the second argument to - # the `strategy` block (after the parsed JSON data). + # If the block has two parameters, the parsed JSON data will be used as + # the first argument and the regex (if any) will be the second. + # Otherwise, only the parsed JSON data will be passed to the block. + # # @param content [String] the JSON text to parse and check # @param regex [Regexp, nil] a regex used for matching versions in the # content @@ -77,10 +79,8 @@ module Homebrew json = parse_json(content) return [] if json.blank? - block_return_value = if regex.present? + block_return_value = if block.arity == 2 yield(json, regex) - elsif block.arity == 2 - raise "Two arguments found in `strategy` block but no regex provided." else yield(json) end diff --git a/Library/Homebrew/test/livecheck/strategy/json_spec.rb b/Library/Homebrew/test/livecheck/strategy/json_spec.rb index dc18a8f074..5949d83e19 100644 --- a/Library/Homebrew/test/livecheck/strategy/json_spec.rb +++ b/Library/Homebrew/test/livecheck/strategy/json_spec.rb @@ -107,11 +107,6 @@ RSpec.describe Homebrew::Livecheck::Strategy::Json do expect(json.versions_from_content(content_simple, regex) { next }).to eq([]) end - it "errors if a block uses two arguments but a regex is not given" do - expect { json.versions_from_content(content_simple) { |json, regex| json["version"][regex, 1] } } - .to raise_error("Two arguments found in `strategy` block but no regex provided.") - end - it "errors on an invalid return type from a block" do expect { json.versions_from_content(content_simple, regex) { 123 } } .to raise_error(TypeError, Homebrew::Livecheck::Strategy::INVALID_BLOCK_RETURN_VALUE_MSG)