lib/locomotive/steam/errors.rb
module Locomotive::Steam
class NoSiteException < ::Exception
end
class RedirectionException < ::Exception
attr_reader :url, :permanent
def initialize(url, permanent: false)
@url = url
@permanent = permanent
super("Redirect to #{url} (#{permanent ? '301': '302'})")
end
end
class PageNotFoundException < ::Exception
end
class TemplateError < ::Liquid::Error
LINES_RANGE = 10
attr_accessor :source, :original_backtrace
def initialize(message, template_name, source, line_number, original_backtrace)
super(message)
self.template_name = template_name
self.line_number = line_number
self.source = source
self.original_backtrace = original_backtrace
end
def code_lines
return [] if source.blank? || line_number.nil?
lines = source.split("\n")
start = line_number - (LINES_RANGE / 2)
start = 1 if start <= 0
finish = line_number + (LINES_RANGE / 2)
(start..finish).map { |i| [i, lines[i - 1]] }
end
def backtrace
original_backtrace
end
private
def message_prefix
""
# "Liquid parsing error - "
end
end
class LiquidError < TemplateError
def initialize(error, file, source)
message = error.message
line_number = error.respond_to?(:line_number) ? error.line_number : error.line
backtrace = error.backtrace
super(message, file, source, line_number, backtrace)
end
end
class RenderError < LiquidError
private
def message_prefix
"Render - "
end
end
class JsonParsingError < TemplateError
def initialize(error, file, source)
line = if error.message =~ /at line ([0-9]+)/
$1.to_i
else
0
end
super(error.message, file, source, line, error.backtrace)
end
private
def message_prefix
"JSON parsing error - "
end
end
class ActionError < TemplateError
attr_accessor :action
def initialize(error, script)
super(error.message, nil, script, 0, error.backtrace)
end
private
def message_prefix
"Action error - "
end
end
end