Sha256: 737ee342785a8391fc0677fa73fd80cbd92d6762cca2cb6aa48a84c8c65d8ac9

Contents?: true

Size: 1.13 KB

Versions: 1

Compression:

Stored size: 1.13 KB

Contents

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

    def initialize(exception)
      @value = exception
    end

    attr_reader :value
    protected :value

    def success?
      false
    end

    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
    # TODO: rename to select
    def detect
      self
    end

    # Applies the given block to exception.
    # This is like `flat_map` for the exception.
    #
    # @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

    # Applies the given block to exception.
    # This is like map for the exception.
    # @return [Try]
    #
    def recover
      Success.new(yield(value))
    rescue => error
      Failure.new(error)
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

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