diff --git a/lib/liquid/block_body.rb b/lib/liquid/block_body.rb index 00811c1..4e2a4c9 100644 --- a/lib/liquid/block_body.rb +++ b/lib/liquid/block_body.rb @@ -93,10 +93,10 @@ module Liquid rescue MemoryError => e raise e rescue UndefinedVariable, UndefinedDropMethod, UndefinedFilter => e - context.handle_error(e, token.line_number) + context.handle_error(e, token.line_number, token.raw) output << nil rescue ::StandardError => e - output << context.handle_error(e, token.line_number) + output << context.handle_error(e, token.line_number, token.raw) end end diff --git a/lib/liquid/context.rb b/lib/liquid/context.rb index d41af49..7692821 100644 --- a/lib/liquid/context.rb +++ b/lib/liquid/context.rb @@ -73,7 +73,7 @@ module Liquid @interrupts.pop end - def handle_error(e, line_number = nil) + def handle_error(e, line_number = nil, raw_token = nil) if e.is_a?(Liquid::Error) e.template_name ||= template_name e.line_number ||= line_number @@ -82,7 +82,9 @@ module Liquid output = nil if exception_handler - result = exception_handler.call(e) + args = [e] + args << { line_number: line_number, raw_token: raw_token } if exception_handler.arity == 2 + result = exception_handler.call(*args) case result when Exception e = result