Sha256: e2331e7d1bcdd0d69375dd527d96c9a2612559a68daa8a97724c9a8f3d7df197

Contents?: true

Size: 1.59 KB

Versions: 2

Compression:

Stored size: 1.59 KB

Contents

# frozen_string_literal: true

module Locomotive
  module Common
    class DefaultException < StandardError
      attr_accessor :notifier

      def initialize(message = nil, parent_exception = nil)
        self.notifier = Locomotive::Common.configuration.notifier
        log_backtrace(parent_exception) if parent_exception
        super(message)
        init_plugins
      end

      def init_plugins
        @plugins = []
        ::Plugins.constants.each do |name|
          @plugins << ::Plugins.const_get(name).new(self)
        end
      rescue NameError
      end

      protected

      def log_backtrace(parent_exception)
        full_error_message = "#{parent_exception.message}\n\t"
        full_error_message += parent_exception.backtrace.join("\n\t")
        full_error_message += "\n\n"

        notifier.fatal full_error_message
      end
    end

    class RendererException < DefaultException
      attr_accessor :name, :template, :liquid_context

      def initialize(exception, name, template, liquid_context)
        self.name = name
        self.template = template
        self.liquid_context = liquid_context
        log_page_into_backtrace(exception)
        super(exception.message)
        set_backtrace(exception.backtrace)
      end

      def log_page_into_backtrace(exception)
        line = template.line_offset
        line += (exception.respond_to?(:line) ? exception.line || 0 : 0) + 1
        message = "#{template.filepath}:#{line}:in `#{name}'"
        notifier.fatal "[ERROR] #{exception.message} - #{message}\n".red
        exception.backtrace.unshift message
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
locomotivecms_common-0.6.0.alpha1 lib/locomotive/common/exception.rb
locomotivecms_common-0.5.0 lib/locomotive/common/exception.rb