Allow Hash with default value or default proc to be used

This commit is contained in:
Brian Candler
2009-06-06 16:16:06 +01:00
parent 09c0b3b391
commit cfe3e6f3be
2 changed files with 18 additions and 10 deletions
+6 -10
View File
@@ -159,16 +159,12 @@ module Liquid
# fetches an object starting at the local scope and then moving up # fetches an object starting at the local scope and then moving up
# the hierachy # the hierachy
def find_variable(key) def find_variable(key)
@scopes.each do |scope| scope = @scopes[0..-2].find { |s| s.has_key?(key) } || @scopes.last
if scope.has_key?(key) variable = scope[key]
variable = scope[key] variable = scope[key] = variable.call(self) if variable.is_a?(Proc)
variable = scope[key] = variable.call(self) if variable.is_a?(Proc) variable = variable.to_liquid
variable = variable.to_liquid variable.context = self if variable.respond_to?(:context=)
variable.context = self if variable.respond_to?(:context=) return variable
return variable
end
end
nil
end end
# resolves namespaced queries gracefully. # resolves namespaced queries gracefully.
+12
View File
@@ -157,4 +157,16 @@ class VariableResolutionTest < Test::Unit::TestCase
assert_equal 'bazbar', template.render assert_equal 'bazbar', template.render
end 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 end