From f9f7f8ab877ac823923b98ae67406335fe8c8880 Mon Sep 17 00:00:00 2001 From: Eduardo Gurgel Pinho Date: Sun, 28 Jun 2026 13:56:48 +1200 Subject: [PATCH] feat: add squish filter --- lib/solid/standard_filter.ex | 23 +++++++++++++++++++ .../integration/scenarios/filter/input.liquid | 9 ++++++++ 2 files changed, 32 insertions(+) diff --git a/lib/solid/standard_filter.ex b/lib/solid/standard_filter.ex index 8fbe8f8..2268bc3 100644 --- a/lib/solid/standard_filter.ex +++ b/lib/solid/standard_filter.ex @@ -989,6 +989,29 @@ defmodule Solid.StandardFilter do @spec strip(term) :: String.t() def strip(input), do: String.trim(to_str(input)) + @doc """ + Removes leading and trailing whitespace and collapses consecutive whitespace to a single space. + + iex> Solid.StandardFilter.squish(" foo bar baz ") + "foo bar baz" + + iex> Solid.StandardFilter.squish("foo\\n bar\\t baz") + "foo bar baz" + + iex> Solid.StandardFilter.squish(" ") + "" + + iex> Solid.StandardFilter.squish(nil) + "" + """ + @spec squish(term) :: String.t() + def squish(input) do + input + |> to_str() + |> String.split() + |> Enum.join(" ") + end + @doc """ Multiplies a number by another number. diff --git a/test/solid/integration/scenarios/filter/input.liquid b/test/solid/integration/scenarios/filter/input.liquid index 0cdf786..112dea0 100644 --- a/test/solid/integration/scenarios/filter/input.liquid +++ b/test/solid/integration/scenarios/filter/input.liquid @@ -136,6 +136,15 @@ strip {{ unknown | strip }} {% # {{ posts | strip }} %} +squish + +{{ " foo bar baz " | squish }} +{{ "foo + bar baz" | squish }} +{{ " " | squish }} +{{ nil | squish }} +{{ 5 | squish }} + minus {{ 4 | minus: 2 }}