Sha256: 49ba848bc82484c4f6b2a7d77672e19e054d1960417603791bb6d97c3cca4e97

Contents?: true

Size: 1.16 KB

Versions: 4

Compression:

Stored size: 1.16 KB

Contents

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

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

    attr_reader :value
    protected :value

    # @return [Boolean]
    def success?
      false
    end

    # @return [true]
    def failure?
      true
    end

    # @raise
    def get
      fail value
    end

    # @return [Try] of calling block
    def or_else
      Success.new(yield)
    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(value).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(value))
    rescue => error
      Failure.new(error)
    end

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

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
fear-0.4.1 lib/fear/failure.rb
fear-0.4.0 lib/fear/failure.rb
fear-0.3.0 lib/fear/failure.rb
fear-0.2.0 lib/fear/failure.rb