From 975b17b5290468fd2b69487c426c3ffb74a23ed4 Mon Sep 17 00:00:00 2001 From: Ryan Alyea Date: Tue, 1 Nov 2011 01:46:26 -0700 Subject: [PATCH] Allow filters in assign. A simple attempt, but basically it shifts the parsing of the right hand side of the assign from a simple context lookup to using the Variable parser (that includes filters). Fixes #79. --- lib/liquid/tags/assign.rb | 6 +++--- test/liquid/assign_test.rb | 6 ++++++ 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/lib/liquid/tags/assign.rb b/lib/liquid/tags/assign.rb index 61e837f..1ce66b4 100644 --- a/lib/liquid/tags/assign.rb +++ b/lib/liquid/tags/assign.rb @@ -9,12 +9,12 @@ module Liquid # {{ foo }} # class Assign < Tag - Syntax = /(#{VariableSignature}+)\s*=\s*(#{QuotedFragment}+)/ + Syntax = /(#{VariableSignature}+)\s*=\s*(.*)\s*/ def initialize(tag_name, markup, tokens) if markup =~ Syntax @to = $1 - @from = $2 + @from = Variable.new($2) else raise SyntaxError.new("Syntax Error in 'assign' - Valid syntax: assign [var] = [source]") end @@ -23,7 +23,7 @@ module Liquid end def render(context) - context.scopes.last[@to] = context[@from] + context.scopes.last[@to] = @from.render(context) '' end diff --git a/test/liquid/assign_test.rb b/test/liquid/assign_test.rb index 64cd59d..883378f 100644 --- a/test/liquid/assign_test.rb +++ b/test/liquid/assign_test.rb @@ -12,4 +12,10 @@ class AssignTest < Test::Unit::TestCase '{% assign foo = values %}.{{ foo[1] }}.', 'values' => %w{foo bar baz}) end + + def test_assign_with_filter + assert_template_result('.bar.', + '{% assign foo = values | split: "," %}.{{ foo[1] }}.', + 'values' => "foo,bar,baz") + end end # AssignTest