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"