Allow Hash with default value or default proc to be used

This commit is contained in:
Brian Candler
2009-06-06 16:04:22 +01:00
parent 09c0b3b391
commit cfe3e6f3be
2 changed files with 18 additions and 10 deletions

View File

@@ -159,16 +159,12 @@ module Liquid
# fetches an object starting at the local scope and then moving up
# the hierachy
def find_variable(key)
@scopes.each do |scope|
if scope.has_key?(key)
variable = scope[key]
variable = scope[key] = variable.call(self) if variable.is_a?(Proc)
variable = variable.to_liquid
variable.context = self if variable.respond_to?(:context=)
return variable
end
end
nil
scope = @scopes[0..-2].find { |s| s.has_key?(key) } || @scopes.last
variable = scope[key]
variable = scope[key] = variable.call(self) if variable.is_a?(Proc)
variable = variable.to_liquid
variable.context = self if variable.respond_to?(:context=)
return variable
end
# resolves namespaced queries gracefully.

View File

@@ -157,4 +157,16 @@ class VariableResolutionTest < Test::Unit::TestCase
assert_equal 'bazbar', template.render
end
def test_hash_with_default_proc
template = Template.parse(%|Hello {{ test }}|)
assigns = Hash.new { |h,k| raise "Unknown variable '#{k}'" }
assigns['test'] = 'Tobi'
assert_equal 'Hello Tobi', template.render!(assigns)
assigns.delete('test')
e = assert_raises(RuntimeError) {
template.render!(assigns)
}
assert_equal "Unknown variable 'test'", e.message
end
end