Sha256: 3448528778c8dde04875319bd16b756cf4f25cfe2640665a4d76a75107fc9e80

Contents?: true

Size: 1.71 KB

Versions: 1

Compression:

Stored size: 1.71 KB

Contents

module Locomotive
  module Common

    class DefaultException < ::Exception
      attr_accessor :notifier

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

      def init_plugins
        begin
          @plugins = []
          ::Plugins.constants.each do |name|
            @plugins << ::Plugins.const_get(name).new(self)
          end
        rescue NameError
        end
      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, self.template, self.liquid_context = name, template, liquid_context
        self.log_page_into_backtrace(exception)
        super(exception.message)
        self.set_backtrace(exception.backtrace)
      end

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

    class MounterException < DefaultException; end
    class GeneratorException < DefaultException; end

  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
locomotivecms_common-0.0.2 lib/locomotive/common/exception.rb