Allow template to be re-used without persisting assigns

This commit is contained in:
Brian Candler
2009-06-06 16:15:37 +01:00
parent 678fdfdb8a
commit 09c0b3b391
2 changed files with 23 additions and 3 deletions
+4 -3
View File
@@ -89,10 +89,11 @@ module Liquid
when Liquid::Context when Liquid::Context
args.shift args.shift
when Hash when Hash
self.assigns.merge!(args.shift) a = args.shift
Context.new(assigns, registers, @rethrow_errors) assigns.each { |k,v| a[k] = v unless a.has_key?(k) }
Context.new(a, registers, @rethrow_errors)
when nil when nil
Context.new(assigns, registers, @rethrow_errors) Context.new(assigns.dup, registers, @rethrow_errors)
else else
raise ArgumentError, "Expect Hash or Liquid::Context as parameter" raise ArgumentError, "Expect Hash or Liquid::Context as parameter"
end end
+19
View File
@@ -138,4 +138,23 @@ class VariableResolutionTest < Test::Unit::TestCase
assert_equal 'worked', template.render assert_equal 'worked', template.render
end end
def test_reuse_parsed_template
template = Template.parse(%|{{ greeting }} {{ name }}|)
template.assigns['greeting'] = 'Goodbye'
assert_equal 'Hello Tobi', template.render('greeting' => 'Hello', 'name' => 'Tobi')
assert_equal 'Hello ', template.render('greeting' => 'Hello', 'unknown' => 'Tobi')
assert_equal 'Hello Brian', template.render('greeting' => 'Hello', 'name' => 'Brian')
assert_equal 'Goodbye Brian', template.render('name' => 'Brian')
assert_equal({'greeting'=>'Goodbye'}, template.assigns)
end
def test_assigns_not_polluted_from_template
template = Template.parse(%|{{ test }}{% assign test = 'bar' %}{{ test }}|)
template.assigns['test'] = 'baz'
assert_equal 'bazbar', template.render
assert_equal 'bazbar', template.render
assert_equal 'foobar', template.render('test' => 'foo')
assert_equal 'bazbar', template.render
end
end end