diff --git a/lib/liquid.rb b/lib/liquid.rb
index 679d1c2b..316af002 100644
--- a/lib/liquid.rb
+++ b/lib/liquid.rb
@@ -22,7 +22,7 @@
$LOAD_PATH.unshift(File.dirname(__FILE__))
module Liquid
- FilterSeparator = /\|/
+ FilterSperator = /\|/
ArgumentSeparator = ','
FilterArgumentSeparator = ':'
VariableAttributeSeparator = '.'
@@ -33,13 +33,7 @@ module Liquid
VariableStart = /\{\{/
VariableEnd = /\}\}/
VariableIncompleteEnd = /\}\}?/
- QuotedString = /"[^"]+"|'[^']+'/
- QuotedFragment = /#{QuotedString}|(?:[^\s,\|'"]|#{QuotedString})+/
- StrictQuotedFragment = /"[^"]+"|'[^']+'|[^\s,\|,\:,\,]+/
- FirstFilterArgument = /#{FilterArgumentSeparator}(?:#{StrictQuotedFragment})/
- OtherFilterArgument = /#{ArgumentSeparator}(?:#{StrictQuotedFragment})/
- SpacelessFilter = /#{FilterSeparator}(?:#{StrictQuotedFragment})(?:#{FirstFilterArgument}(?:#{OtherFilterArgument})*)?/
- Expression = /(?:#{QuotedFragment}(?:#{SpacelessFilter})*)/
+ QuotedFragment = /"[^"]+"|'[^']+'|[^\s,|]+/
TagAttributes = /(\w+)\s*\:\s*(#{QuotedFragment})/
AnyStartingTag = /\{\{|\{\%/
PartialTemplateParser = /#{TagStart}.*?#{TagEnd}|#{VariableStart}.*?#{VariableIncompleteEnd}/
diff --git a/lib/liquid/context.rb b/lib/liquid/context.rb
index d1ca1092..69b76643 100644
--- a/lib/liquid/context.rb
+++ b/lib/liquid/context.rb
@@ -133,9 +133,6 @@ module Liquid
:blank?
when 'empty'
:empty?
- # filtered variables
- when SpacelessFilter
- filtered_variable(key)
# Single quoted strings
when /^'(.*)'$/
$1.to_s
@@ -224,9 +221,5 @@ module Liquid
object
end
-
- def filtered_variable(markup)
- Variable.new(markup).render(self)
- end
end
end
diff --git a/lib/liquid/tags/assign.rb b/lib/liquid/tags/assign.rb
index 7b48b84f..a68cf30d 100644
--- a/lib/liquid/tags/assign.rb
+++ b/lib/liquid/tags/assign.rb
@@ -9,7 +9,7 @@ module Liquid
# {{ monkey }}
#
class Assign < Tag
- Syntax = /(#{VariableSignature}+)\s*=\s*(#{Expression}+)/
+ Syntax = /(#{VariableSignature}+)\s*=\s*(#{QuotedFragment}+)/
def initialize(tag_name, markup, tokens)
if markup =~ Syntax
diff --git a/lib/liquid/tags/case.rb b/lib/liquid/tags/case.rb
index f6f24d4d..0733c51a 100644
--- a/lib/liquid/tags/case.rb
+++ b/lib/liquid/tags/case.rb
@@ -1,7 +1,7 @@
module Liquid
class Case < Block
- Syntax = /(#{Expression})/
- WhenSyntax = /(#{Expression})(?:(?:\s+or\s+|\s*\,\s*)(#{Expression}.*))?/
+ Syntax = /(#{QuotedFragment})/
+ WhenSyntax = /(#{QuotedFragment})(?:(?:\s+or\s+|\s*\,\s*)(#{QuotedFragment}.*))?/
def initialize(tag_name, markup, tokens)
@blocks = []
diff --git a/lib/liquid/tags/cycle.rb b/lib/liquid/tags/cycle.rb
index bc39d3fe..aa7f64ce 100644
--- a/lib/liquid/tags/cycle.rb
+++ b/lib/liquid/tags/cycle.rb
@@ -13,8 +13,8 @@ module Liquid
#
Item five
#
class Cycle < Tag
- SimpleSyntax = /^#{Expression}/
- NamedSyntax = /^(#{Expression})\s*\:\s*(.*)/
+ SimpleSyntax = /^#{QuotedFragment}/
+ NamedSyntax = /^(#{QuotedFragment})\s*\:\s*(.*)/
def initialize(tag_name, markup, tokens)
case markup
@@ -48,7 +48,7 @@ module Liquid
def variables_from_string(markup)
markup.split(',').collect do |var|
- var =~ /\s*(#{Expression})\s*/
+ var =~ /\s*(#{QuotedFragment})\s*/
$1 ? $1 : nil
end.compact
end
diff --git a/lib/liquid/tags/for.rb b/lib/liquid/tags/for.rb
index 4ff86713..b17a3320 100644
--- a/lib/liquid/tags/for.rb
+++ b/lib/liquid/tags/for.rb
@@ -42,7 +42,7 @@ module Liquid
# forloop.last:: Returns true if the item is the last item.
#
class For < Block
- Syntax = /(\w+)\s+in\s+(#{Expression}+)\s*(reversed)?/
+ Syntax = /(\w+)\s+in\s+(#{QuotedFragment}+)\s*(reversed)?/
def initialize(tag_name, markup, tokens)
if markup =~ Syntax
diff --git a/lib/liquid/tags/if.rb b/lib/liquid/tags/if.rb
index a84d5677..8ff47088 100644
--- a/lib/liquid/tags/if.rb
+++ b/lib/liquid/tags/if.rb
@@ -13,7 +13,7 @@ module Liquid
#
class If < Block
SyntaxHelp = "Syntax Error in tag 'if' - Valid syntax: if [expression]"
- Syntax = /(#{Expression})\s*([=!<>a-z_]+)?\s*(#{Expression})?/
+ Syntax = /(#{QuotedFragment})\s*([=!<>a-z_]+)?\s*(#{QuotedFragment})?/
def initialize(tag_name, markup, tokens)
diff --git a/lib/liquid/variable.rb b/lib/liquid/variable.rb
index cf585186..39eb6e20 100644
--- a/lib/liquid/variable.rb
+++ b/lib/liquid/variable.rb
@@ -19,8 +19,9 @@ module Liquid
@filters = []
if match = markup.match(/\s*(#{QuotedFragment})/)
@name = match[1]
- if markup.match(/#{FilterSeparator}\s*(.*)/)
- filters = Regexp.last_match(1).split(/#{FilterSeparator}/)
+ if markup.match(/#{FilterSperator}\s*(.*)/)
+ filters = Regexp.last_match(1).split(/#{FilterSperator}/)
+
filters.each do |f|
if matches = f.match(/\s*(\w+)/)
filtername = matches[1]
diff --git a/test/assign_test.rb b/test/assign_test.rb
index 15d00e53..9bf6f2fb 100644
--- a/test/assign_test.rb
+++ b/test/assign_test.rb
@@ -1,11 +1,10 @@
require File.dirname(__FILE__) + '/helper'
-class IfElseTest < Test::Unit::TestCase
+class AssignTest < Test::Unit::TestCase
include Liquid
- def test_with_filtered_expressions
- assert_template_result('foo','{% assign foo = values|sort|last %}{{ foo }}', 'values' => %w{foo bar baz})
- assert_template_result('foo','{% assign sorted = values|sort %}{{ sorted | last }}', 'values' => %w{foo bar baz})
+ def test_assigned_variable
+ assert_template_result('.foo.','{% assign foo = values %}.{{ foo }}.', 'values' => %w{foo bar baz})
end
end
\ No newline at end of file
diff --git a/test/if_else_test.rb b/test/if_else_test.rb
index 8e52d00a..5daef3f1 100644
--- a/test/if_else_test.rb
+++ b/test/if_else_test.rb
@@ -112,25 +112,6 @@ class IfElseTest < Test::Unit::TestCase
assert_template_result('elsif','{% if false %}if{% elsif true %}elsif{% endif %}')
end
- def test_with_filtered_expressions
- assert_template_result('yes','{% if "BLAH"|downcase == "blah" %}yes{% endif %}')
- assert_template_result('yes','{% if "FOO BAR"|truncatewords:1,"--" == "FOO--" %}yes{% endif %}')
- assert_template_result('yes','{% if "FOO BAR"|truncatewords:1,"--"|downcase == "foo--" %}yes{% endif %}')
- assert_template_result('yes','{% if "foo--" == "FOO BAR"|truncatewords:1,"--"|downcase %}yes{% endif %}')
- # array transformation, to make sure we aren't converting arrays to strings somewhere along the way:
- assert_template_result('yes','{% if values|sort == sorted %}yes{% endif %}', 'values' => %w{foo bar baz}, 'sorted' => %w{bar baz foo})
- end
-
- def test_allow_no_spaces_in_filtered_expressions
- assert_template_result('','{% if "foo--" == "FOO BAR" |truncatewords:1,"--"|downcase %}yes{% endif %}')
- assert_template_result('','{% if "foo--" == "FOO BAR"| truncatewords:1,"--"|downcase %}yes{% endif %}')
- assert_template_result('','{% if "foo--" == "FOO BAR"|truncatewords :1,"--"|downcase %}yes{% endif %}')
- assert_template_result('','{% if "foo--" == "FOO BAR"|truncatewords: 1,"--"|downcase %}yes{% endif %}')
- assert_template_result('','{% if "foo--" == "FOO BAR"|truncatewords:1 ,"--"|downcase %}yes{% endif %}')
- assert_template_result('','{% if "foo--" == "FOO BAR"|truncatewords:1, "--"|downcase %}yes{% endif %}')
- assert_template_result('','{% if "foo--" == "FOO BAR"|truncatewords:1,"--" |downcase %}yes{% endif %}')
- end
-
def test_syntax_error_no_variable
assert_raise(SyntaxError){ assert_template_result('', '{% if jerry == 1 %}')}
end
diff --git a/test/standard_tag_test.rb b/test/standard_tag_test.rb
index abb84570..e2255793 100644
--- a/test/standard_tag_test.rb
+++ b/test/standard_tag_test.rb
@@ -98,11 +98,7 @@ HERE
assigns = {'array' => [1,2,3] }
assert_template_result('+--', '{%for item in array%}{% if forloop.first %}+{% else %}-{% endif %}{%endfor%}', assigns)
end
-
- def test_for_with_filtered_expressions
- assert_template_result('abc','{% for letter in letters|sort %}{{ letter }}{% endfor %}', 'letters' => %w{c b a})
- end
-
+
def test_limiting
assigns = {'array' => [1,2,3,4,5,6,7,8,9,0]}
assert_template_result('12','{%for i in array limit:2 %}{{ i }}{%endfor%}',assigns)
@@ -353,10 +349,10 @@ HERE
assert_template_result('one two one','{%cycle "one", "two"%} {%cycle "one", "two"%} {%cycle "one", "two"%}')
- assert_template_result('text-align: left text-align: right','{%cycle "text-align: left", "text-align: right" %} {%cycle "text-align: left", "text-align: right"%}')
+ assert_template_result('text-align: left,text-align: right','{%cycle "text-align: left", "text-align: right" %},{%cycle "text-align: left", "text-align: right"%}')
- assert_template_result(' ','{% cycle "", "", "" %}')
- assert_template_result('
','{% cycle "", "", "
" %} {% cycle "", "", "
" %} {% cycle "", "", "
" %} {% cycle "", "", "
" %}')
+ assert_template_result('.','.{% cycle "", "", "
" %}')
+ assert_template_result('...
','.{% cycle "", "", "
" %}.{% cycle "", "", "
" %}.{% cycle "", "", "
" %} {% cycle "", "", "
" %}')
end