diff --git a/lib/liquid/variable.rb b/lib/liquid/variable.rb index 5758fb0..883e3ea 100644 --- a/lib/liquid/variable.rb +++ b/lib/liquid/variable.rb @@ -23,9 +23,9 @@ module Liquid if match[2].match(/#{FilterSeparator}\s*(.*)/o) filters = Regexp.last_match(1).scan(FilterParser) filters.each do |f| - if matches = f.match(/\s*(\w+)(?:\s*#{FilterArgumentSeparator}(.*))?/) + if matches = f.match(/\s*(\w+)/) filtername = matches[1] - filterargs = matches[2].to_s.scan(/(?:\A|#{ArgumentSeparator})\s*((?:\w+\s*\:\s*)?#{QuotedFragment})/o).flatten + filterargs = f.scan(/(?:#{FilterArgumentSeparator}|#{ArgumentSeparator})\s*((?:\w+\s*\:\s*)?#{QuotedFragment})/o).flatten @filters << [filtername, filterargs] end end diff --git a/test/liquid/variable_test.rb b/test/liquid/variable_test.rb index 217a885..7554e00 100644 --- a/test/liquid/variable_test.rb +++ b/test/liquid/variable_test.rb @@ -113,6 +113,12 @@ class VariableTest < Test::Unit::TestCase assert_equal 'hello', var.name assert_equal [['things',["greeting: \"world\"","farewell: 'goodbye'"]]], var.filters end + + def test_lax_filter_argument_parsing + var = Variable.new(%! number_of_comments | pluralize: 'comment': 'comments' !) + assert_equal 'number_of_comments', var.name + assert_equal [['pluralize',["'comment'","'comments'"]]], var.filters + end end