Sha256: 2457f9123b6180c5f10f75de52ec9b3b3c68270ecd4dacc524e8df80dd8ffa5d

Contents?: true

Size: 1.35 KB

Versions: 1

Compression:

Stored size: 1.35 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

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

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
fear-0.4.2 lib/fear/failure.rb