From ee41b3f4a31d47b9f2b17324ffcd92cab32da9b7 Mon Sep 17 00:00:00 2001 From: Dylan Smith Date: Tue, 18 Dec 2012 00:45:42 -0500 Subject: [PATCH] Fix filter parser regex for filter args without separating spaces. The regex was using \S+ to match the comma between the filters arguments, but would continue to match idependent quote characters and filter separators. This can result in multiple filters being interpreted as a single one with many arguments. --- lib/liquid/variable.rb | 2 +- test/liquid/variable_test.rb | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/lib/liquid/variable.rb b/lib/liquid/variable.rb index 837c588..0c04fe2 100644 --- a/lib/liquid/variable.rb +++ b/lib/liquid/variable.rb @@ -11,7 +11,7 @@ module Liquid # {{ user | link }} # class Variable - FilterParser = /(?:#{FilterSeparator}|(?:\s*(?!(?:#{FilterSeparator}))(?:#{QuotedFragment}|\S+)\s*)+)/o + FilterParser = /(?:#{FilterSeparator}|(?:\s*(?:#{QuotedFragment}|#{ArgumentSeparator})\s*)+)/o attr_accessor :filters, :name def initialize(markup) diff --git a/test/liquid/variable_test.rb b/test/liquid/variable_test.rb index b17c2a7..7bdef35 100644 --- a/test/liquid/variable_test.rb +++ b/test/liquid/variable_test.rb @@ -66,6 +66,10 @@ class VariableTest < Test::Unit::TestCase var = Variable.new('hello|textileze|paragraph') assert_equal 'hello', var.name assert_equal [[:textileze,[]], [:paragraph,[]]], var.filters + + var = Variable.new("hello|replace:'foo','bar'|textileze") + assert_equal 'hello', var.name + assert_equal [[:replace, ["'foo'", "'bar'"]], [:textileze, []]], var.filters end def test_symbol