From f5d6a36574b7ddf5e1a00395f553a0f872fb9f16 Mon Sep 17 00:00:00 2001 From: Ian Ker-Seymer Date: Mon, 17 Mar 2025 17:43:57 -0400 Subject: [PATCH] Stringify properties before filtering (#1929) --- lib/liquid/standardfilters.rb | 4 +++- test/integration/standard_filter_test.rb | 13 +++++++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/lib/liquid/standardfilters.rb b/lib/liquid/standardfilters.rb index 618cd71b..63d080dd 100644 --- a/lib/liquid/standardfilters.rb +++ b/lib/liquid/standardfilters.rb @@ -979,8 +979,10 @@ module Liquid attr_reader :context def filter_array(input, property, target_value, default_value = [], &block) - ary = InputIterator.new(input, context) + property = Liquid::Utils.to_s(property) + return default_value if property.empty? + ary = InputIterator.new(input, context) return default_value if ary.empty? block.call(ary) do |item| diff --git a/test/integration/standard_filter_test.rb b/test/integration/standard_filter_test.rb index ef127832..913dfa25 100644 --- a/test/integration/standard_filter_test.rb +++ b/test/integration/standard_filter_test.rb @@ -1061,6 +1061,19 @@ class StandardFiltersTest < Minitest::Test assert_template_result(expected_output, template, { "array" => array }) end + def test_where_with_non_string_property + array = [ + { "handle" => "alpha", "{}" => true }, + { "handle" => "beta", "{}" => false }, + { "handle" => "gamma", "{}" => false }, + { "handle" => "delta", "{}" => true }, + ] + template = "{{ array | where: some_property, true | map: 'handle' | join: ' ' }}" + expected_output = "alpha delta" + + assert_template_result(expected_output, template, { "array" => array, "some_property" => {} }) + end + def test_where_string_keys input = [ "alpha", "beta", "gamma", "delta"