Sha256: 8dd91bda146816b01489e494629a00d83e2a0e49dfdb64394b625d0b76350c1a

Contents?: true

Size: 1.25 KB

Versions: 9

Compression:

Stored size: 1.25 KB

Contents

# frozen_string_literal: true

module Lite
  module Command

    class Fault < StandardError

      attr_reader :reason, :metadata, :caused_by, :thrown_by

      def initialize(**params)
        @reason    = params.fetch(:reason)
        @metadata  = params.fetch(:metadata)
        @caused_by = params.fetch(:caused_by)
        @thrown_by = params.fetch(:thrown_by)

        super(reason)
      end

      def self.build(type, catcher, thrower, dynamic: false)
        klass = dynamic ? catcher.class : Lite::Command
        fault = klass.const_get(type.to_s)
        fault = fault.new(
          reason: catcher.reason,
          metadata: catcher.metadata,
          caused_by: catcher.caused_by,
          thrown_by: catcher.thrown_by
        )
        fault.set_backtrace(thrower.backtrace) if thrower.respond_to?(:backtrace)
        fault
      end

      def self.===(object)
        Utils.descendant_of?(self, object) || Utils.descendant_of?(object, self)
      end

      def type
        @type ||= self.class.name.split("::").last.downcase
      end

      def ===(object)
        Utils.descendant_of?(self, object)
      end

    end

    class Noop < Fault; end
    class Invalid < Fault; end
    class Failure < Fault; end
    class Error < Fault; end

  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
lite-command-3.3.3 lib/lite/command/fault.rb
lite-command-3.3.2 lib/lite/command/fault.rb
lite-command-3.3.1 lib/lite/command/fault.rb
lite-command-3.3.0 lib/lite/command/fault.rb
lite-command-3.2.1 lib/lite/command/fault.rb
lite-command-3.2.0 lib/lite/command/fault.rb
lite-command-3.1.5 lib/lite/command/fault.rb
lite-command-3.1.4 lib/lite/command/fault.rb
lite-command-3.1.3 lib/lite/command/fault.rb