Add strict_variables/strict_filters render options to check for undefined variables and filters

This commit is contained in:
Ivan Kuznetsov
2016-02-03 10:49:33 +07:00
parent 08de6ed2c5
commit dadd9b4dd2
10 changed files with 139 additions and 12 deletions
+3 -1
View File
@@ -13,7 +13,7 @@ module Liquid
# context['bob'] #=> nil class Context
class Context
attr_reader :scopes, :errors, :registers, :environments, :resource_limits
attr_accessor :exception_handler, :template_name, :partial, :global_filter
attr_accessor :exception_handler, :template_name, :partial, :global_filter, :strict_variables, :strict_filters
def initialize(environments = {}, outer_scope = {}, registers = {}, rethrow_errors = false, resource_limits = nil)
@environments = [environments].flatten
@@ -207,6 +207,8 @@ module Liquid
def lookup_and_evaluate(obj, key)
if (value = obj[key]).is_a?(Proc) && obj.respond_to?(:[]=)
obj[key] = (value.arity == 0) ? value.call : value.call(self)
elsif strict_variables && obj.respond_to?(:key?) && !obj.key?(key)
raise Liquid::UndefinedVariable, "undefined variable #{key}"
else
value
end