From d589c516974058d84ce0e17ab51cd37ae91bfa21 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C3=ABl=20Gallego?= Date: Thu, 19 Feb 2026 10:03:52 +0900 Subject: [PATCH] Add squish filter --- lib/liquid/standardfilters.rb | 13 +++++++++++++ test/integration/standard_filter_test.rb | 7 +++++++ 2 files changed, 20 insertions(+) diff --git a/lib/liquid/standardfilters.rb b/lib/liquid/standardfilters.rb index 24e135d91..a91462f43 100644 --- a/lib/liquid/standardfilters.rb +++ b/lib/liquid/standardfilters.rb @@ -293,6 +293,19 @@ def split(input, pattern) input.split(pattern) end + # @liquid_public_docs + # @liquid_type filter + # @liquid_category string + # @liquid_summary + # Removes leading and trailing whitespace and collapses consecutive whitespace to a single space. + # @liquid_syntax string | squish + # @liquid_return [string] + def squish(input) + return if input.nil? + + Utils.to_s(input).strip.gsub(/\s+/, ' ') + end + # @liquid_public_docs # @liquid_type filter # @liquid_category string diff --git a/test/integration/standard_filter_test.rb b/test/integration/standard_filter_test.rb index ef5f15493..b69bdf7af 100644 --- a/test/integration/standard_filter_test.rb +++ b/test/integration/standard_filter_test.rb @@ -164,6 +164,13 @@ def test_split assert_equal(['A', 'Z'], @filters.split('A1Z', 1)) end + def test_squish_filter + assert_equal("foo bar boo", Liquid::Template.parse(%Q({{ " foo bar +\t boo " | squish }})).render) + assert_equal("", Liquid::Template.parse('{{ nil | squish }}').render) + assert_equal("", Liquid::Template.parse('{{ " " | squish }}').render) + end + def test_escape assert_equal('<strong>', @filters.escape('')) assert_equal('1', @filters.escape(1))