mirror of
https://github.com/kemko/liquid.git
synced 2026-01-01 15:55:40 +03:00
Make error locations available for non-Liquid::Error exceptions.
This commit is contained in:
@@ -50,6 +50,7 @@ require 'liquid/i18n'
|
||||
require 'liquid/drop'
|
||||
require 'liquid/extensions'
|
||||
require 'liquid/errors'
|
||||
require 'liquid/error_location'
|
||||
require 'liquid/interrupts'
|
||||
require 'liquid/strainer'
|
||||
require 'liquid/expression'
|
||||
|
||||
@@ -12,7 +12,7 @@ module Liquid
|
||||
#
|
||||
# context['bob'] #=> nil class Context
|
||||
class Context
|
||||
attr_reader :scopes, :errors, :registers, :environments, :resource_limits
|
||||
attr_reader :scopes, :errors, :error_locations, :registers, :environments, :resource_limits
|
||||
attr_accessor :exception_handler, :render_errors, :template_name
|
||||
|
||||
def initialize(environments = {}, outer_scope = {}, registers = {}, rethrow_errors = false, resource_limits = nil, render_errors = true)
|
||||
@@ -20,6 +20,7 @@ module Liquid
|
||||
@scopes = [(outer_scope || {})]
|
||||
@registers = registers
|
||||
@errors = []
|
||||
@error_locations = []
|
||||
@resource_limits = resource_limits || ResourceLimits.new(Template.default_resource_limits)
|
||||
squash_instance_assigns_with_environments
|
||||
@render_errors = render_errors
|
||||
@@ -70,6 +71,7 @@ module Liquid
|
||||
end
|
||||
|
||||
errors.push(e)
|
||||
error_locations.push(ErrorLocation.from_token(template_name, token))
|
||||
raise if exception_handler && exception_handler.call(e)
|
||||
render_errors ? Liquid::Error.render(e) : ''
|
||||
end
|
||||
|
||||
11
lib/liquid/error_location.rb
Normal file
11
lib/liquid/error_location.rb
Normal file
@@ -0,0 +1,11 @@
|
||||
module Liquid
|
||||
ErrorLocation = Struct.new(:template_name, :line_number) do
|
||||
def self.line_number_from_token(token)
|
||||
token.respond_to?(:line_number) ? token.line_number : nil
|
||||
end
|
||||
|
||||
def self.from_token(template_name, token)
|
||||
new(template_name, line_number_from_token(token))
|
||||
end
|
||||
end
|
||||
end
|
||||
@@ -18,9 +18,8 @@ module Liquid
|
||||
end
|
||||
|
||||
def set_line_number_from_token(token)
|
||||
return unless token.respond_to?(:line_number)
|
||||
return if line_number
|
||||
self.line_number = token.line_number
|
||||
self.line_number = ErrorLocation.line_number_from_token(token)
|
||||
end
|
||||
|
||||
def self.render(e)
|
||||
@@ -60,5 +59,4 @@ module Liquid
|
||||
StackLevelError = Class.new(Error)
|
||||
TaintedError = Class.new(Error)
|
||||
MemoryError = Class.new(Error)
|
||||
ZeroDivisionError = Class.new(Error)
|
||||
end
|
||||
|
||||
@@ -279,8 +279,6 @@ module Liquid
|
||||
# division
|
||||
def divided_by(input, operand)
|
||||
apply_operation(input, operand, :/)
|
||||
rescue ::ZeroDivisionError => e
|
||||
raise Liquid::ZeroDivisionError.new(e.message)
|
||||
end
|
||||
|
||||
def modulo(input, operand)
|
||||
|
||||
Reference in New Issue
Block a user