From cbf898674521047be256adf31e7153ad7fd66876 Mon Sep 17 00:00:00 2001 From: James MacAulay Date: Wed, 23 Sep 2009 15:54:25 -0400 Subject: [PATCH] fix variable output with quoted strings containing pipe ("|") characters --- lib/liquid/variable.rb | 7 ++++--- test/standard_filter_test.rb | 4 ++++ 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/lib/liquid/variable.rb b/lib/liquid/variable.rb index fb39ed7..1afaa13 100644 --- a/lib/liquid/variable.rb +++ b/lib/liquid/variable.rb @@ -11,16 +11,17 @@ module Liquid # {{ user | link }} # class Variable + FilterParser = /(?:#{FilterSeparator}|(?:\s*(?!(?:#{FilterSeparator}))(?:#{QuotedFragment}|\S+)\s*)+)/ attr_accessor :filters, :name def initialize(markup) @markup = markup @name = nil @filters = [] - if match = markup.match(/\s*(#{QuotedFragment})/) + if match = markup.match(/\s*(#{QuotedFragment})(.*)/) @name = match[1] - if markup.match(/#{FilterSeparator}\s*(.*)/) - filters = Regexp.last_match(1).split(/#{FilterSeparator}/) + if match[2].match(/#{FilterSeparator}\s*(.*)/) + filters = Regexp.last_match(1).scan(FilterParser) filters.each do |f| if matches = f.match(/\s*(\w+)/) filtername = matches[1] diff --git a/test/standard_filter_test.rb b/test/standard_filter_test.rb index 0b9ee5b..916c113 100644 --- a/test/standard_filter_test.rb +++ b/test/standard_filter_test.rb @@ -116,6 +116,10 @@ class StandardFiltersTest < Test::Unit::TestCase assert_equal 'a a a', @filters.remove_first("a a a a", 'a ') assert_template_result 'a a a', "{{ 'a a a a' | remove_first: 'a ' }}" end + + def test_pipes_in_string_arguments + assert_template_result 'foobar', "{{ 'foo|bar' | remove: '|' }}" + end def test_strip_newlines assert_template_result 'abc', "{{ source | strip_newlines }}", 'source' => "a\nb\nc"