lib/active_mocker/error_object.rb
# frozen_string_literal: true
module ActiveMocker
class ErrorObject
attr_reader :message, :level, :original_error, :type, :class_name
def initialize(level: :warn, message:, class_name:, type:, original_error: nil)
@level = level
@message = message
@class_name = class_name
@type = type
@original_error = original_error
end
def self.build_from(object: nil, exception: nil, class_name: nil, type: nil)
if object
args = [:message, :original_error, :level, :type, :class_name].each_with_object({}) do |meth, hash|
hash[meth] = object.public_send(meth) if object.respond_to? meth
end
args[:type] = type unless type.nil?
args[:class_name] = class_name unless class_name.nil?
return new(args)
elsif exception && class_name
return new(message: exception.message,
class_name: class_name,
original_error: exception,
type: type ? type : :standard_error)
end
raise ArgumentError
end
def original_error?
!original_error.nil?
end
def level_color
case level
when :standard_error, :fatal, :error
:red
when :warn
:yellow
when :info
:default
end
end
end
end