Gracefully empty property in map filter

This commit is contained in:
Ian Ker-Seymer
2025-04-04 09:59:04 -04:00
parent 7900043ffc
commit 19e287dda2
2 changed files with 41 additions and 9 deletions
+4 -4
View File
@@ -536,11 +536,11 @@ module Liquid
# @liquid_syntax array | map: string
# @liquid_return [array[untyped]]
def map(input, property)
if property.nil?
raise_property_error(property)
end
property = Utils.to_s(property)
# Return the input array if property is empty (no-op)
return InputIterator.new(input, context).to_a if property.empty?
InputIterator.new(input, context).map do |e|
e = e.call if e.is_a?(Proc)
+37 -5
View File
@@ -560,15 +560,47 @@ class StandardFiltersTest < Minitest::Test
end
end
def test_map_returns_empty_with_no_property
foo = [
def test_map_with_nil_property
array = [
{ "handle" => "alpha", "value" => "A" },
{ "handle" => "beta", "value" => "B" },
{ "handle" => "gamma", "value" => "C" }
]
assert_template_result("alpha beta gamma", "{{ array | map: nil | map: 'handle' | join: ' ' }}", { "array" => array })
end
def test_map_with_empty_string_property
array = [
{ "handle" => "alpha", "value" => "A" },
{ "handle" => "beta", "value" => "B" },
{ "handle" => "gamma", "value" => "C" }
]
assert_template_result("alpha beta gamma", "{{ array | map: '' | map: 'handle' | join: ' ' }}", { "array" => array })
end
def test_map_with_value_property
array = [
{ "handle" => "alpha", "value" => "A" },
{ "handle" => "beta", "value" => "B" },
{ "handle" => "gamma", "value" => "C" }
]
assert_template_result("A B C", "{{ array | map: 'value' | join: ' ' }}", { "array" => array })
end
def test_map_returns_input_with_no_property
input = [
[1],
[2],
[3],
]
assert_raises(Liquid::ArgumentError) do
@filters.map(foo, nil)
end
result = @filters.map(input, nil)
assert_equal(input.flatten, result)
result = @filters.map(input, '')
assert_equal(input.flatten, result)
end
def test_sort_works_on_enumerables