Sha256: 838fa29002ca861ce3eded8f2a606081301fad40ab244cdcbd2645303dff97fb

Contents?: true

Size: 1.36 KB

Versions: 5

Compression:

Stored size: 1.36 KB

Contents

module Fear
  class Failure
    include Try
    include Dry::Equalizer(:exception)
    include RightBiased::Left

    # @param [StandardError]
    def initialize(exception)
      @exception = exception
    end

    attr_reader :exception

    # @return [Boolean]
    def success?
      false
    end

    # @return [true]
    def failure?
      true
    end

    # @raise
    def get
      fail exception
    end

    # @return [Try] of calling block
    def or_else(*args)
      super
    rescue => error
      Failure.new(error)
    end

    # @return [Failure] self
    def flatten
      self
    end

    # @return [Failure] self
    def select
      self
    end

    # @yieldparam [Exception]
    # @yieldreturn [Try]
    # @return [Try]
    def recover_with
      yield(exception).tap do |result|
        Utils.assert_type!(result, Success, Failure)
      end
    rescue => error
      Failure.new(error)
    end

    # @yieldparam [Exception]
    # @yieldreturn [any]
    # @return [Try]
    def recover
      Success.new(yield(exception))
    rescue => error
      Failure.new(error)
    end

    # @return [Left]
    def to_either
      Left.new(exception)
    end

    # Used in case statement
    # @param other [any]
    # @return [Boolean]
    def ===(other)
      if other.is_a?(Failure)
        exception === other.exception
      else
        super
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
fear-0.10.0 lib/fear/failure.rb
fear-0.9.0 lib/fear/failure.rb
fear-0.8.0 lib/fear/failure.rb
fear-0.7.0 lib/fear/failure.rb
fear-0.6.0 lib/fear/failure.rb