Sha256: 2f12319948b321c96d275fbb42bd3e19bfc56479697c025f4c08e9a16a7f8060

Contents?: true

Size: 1.52 KB

Versions: 3

Compression:

Stored size: 1.52 KB

Contents

# frozen_string_literal: true

module LightServiceExt
  class ErrorInfo
    attr_reader :error, :type, :message, :title

    def initialize(error, message: nil, fatal: false)
      @fatal = fatal
      @error = error
      @type = error.class.name
      @message = message || error.try(:message)
      @title = "#{error.class.name} : #{error&.message}"
    end

    def fatal_error?
      @fatal || !non_fatal_error?
    end

    def error_summary
      header = fatal_error? ? "SERVER ERROR FOUND" : "ERROR FOUND"

      <<~TEXT
        =========== #{header}: #{title} ===========

        FULL STACK TRACE
        #{clean_backtrace.join("\n")}

        #{'=' * 56}
      TEXT
    end

    def errors
      model = error.try(:model) || error.try(:record)
      message = model.present? ? model.errors.messages : error.message

      { base: message }
    end

    def to_h
      {
        type: type,
        message: message,
        exception: title,
        backtrace: clean_backtrace[0, 5]&.join("\n"),
        error: error,
        fatal_error?: fatal_error?,
        errors: errors
      }
    end

    def backtrace
      error&.backtrace || []
    end

    def clean_backtrace
      @clean_backtrace ||= if defined? Rails.backtrace_cleaner
                             Rails.backtrace_cleaner.clean(backtrace || [])
                           else
                             backtrace || []
                           end
    end

    def non_fatal_error?
      error.nil? || LightServiceExt.config.non_fatal_error?(error)
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
light-service-ext-0.1.11 lib/light-service-ext/error_info.rb
light-service-ext-0.1.10 lib/light-service-ext/error_info.rb
light-service-ext-0.1.9 lib/light-service-ext/error_info.rb