diff --git a/lib/liquid.rb b/lib/liquid.rb index b9ba4c5..dccef10 100644 --- a/lib/liquid.rb +++ b/lib/liquid.rb @@ -38,7 +38,7 @@ module Liquid StrictQuotedFragment = /"[^"]+"|'[^']+'|[^\s,\|,\:,\,]+/ FirstFilterArgument = /#{FilterArgumentSeparator}(?:#{StrictQuotedFragment})/ OtherFilterArgument = /#{ArgumentSeparator}(?:#{StrictQuotedFragment})/ - SpacelessFilter = /#{FilterSeparator}(?:#{StrictQuotedFragment})(?:#{FirstFilterArgument}(?:#{OtherFilterArgument})*)?/ + SpacelessFilter = /^(?:'[^']+'|"[^"]+"|[^'"])*#{FilterSeparator}(?:#{StrictQuotedFragment})(?:#{FirstFilterArgument}(?:#{OtherFilterArgument})*)?/ Expression = /(?:#{QuotedFragment}(?:#{SpacelessFilter})*)/ TagAttributes = /(\w+)\s*\:\s*(#{QuotedFragment})/ AnyStartingTag = /\{\{|\{\%/ diff --git a/test/lib/liquid/filter_test.rb b/test/lib/liquid/filter_test.rb index 8b91e72..3c81aa6 100644 --- a/test/lib/liquid/filter_test.rb +++ b/test/lib/liquid/filter_test.rb @@ -26,6 +26,7 @@ class FiltersTest < Test::Unit::TestCase def test_local_filter @context['var'] = 1000 @context.add_filters(MoneyFilter) + assert_equal ' 1000$ ', Variable.new("var | money").render(@context) end @@ -39,17 +40,20 @@ class FiltersTest < Test::Unit::TestCase @context['var'] = 1000 @context.add_filters(MoneyFilter) @context.add_filters(CanadianMoneyFilter) + assert_equal ' 1000$ CAD ', Variable.new("var | money").render(@context) end def test_size @context['var'] = 'abcd' @context.add_filters(MoneyFilter) + assert_equal 4, Variable.new("var | size").render(@context) end def test_join @context['var'] = [1,2,3,4] + assert_equal "1 2 3 4", Variable.new("var | join").render(@context) end @@ -58,22 +62,30 @@ class FiltersTest < Test::Unit::TestCase @context['numbers'] = [2,1,4,3] @context['words'] = ['expected', 'as', 'alphabetic'] @context['arrays'] = [['flattened'], ['are']] + assert_equal [1,2,3,4], Variable.new("numbers | sort").render(@context) - assert_equal ['alphabetic', 'as', 'expected'], - Variable.new("words | sort").render(@context) + assert_equal ['alphabetic', 'as', 'expected'], Variable.new("words | sort").render(@context) assert_equal [3], Variable.new("value | sort").render(@context) assert_equal ['are', 'flattened'], Variable.new("arrays | sort").render(@context) end def test_strip_html @context['var'] = "bla blub" + assert_equal "bla blub", Variable.new("var | strip_html").render(@context) end def test_capitalize @context['var'] = "blub" + assert_equal "Blub", Variable.new("var | capitalize").render(@context) end + + def test_nonexistent_filter_is_ignored + @context['var'] = 1000 + + assert_equal 1000, Variable.new("var | xyzzy").render(@context) + end end class FiltersInTemplate < Test::Unit::TestCase