Sha256: ee7a57cac28bc784308e7b42bf38048ca618e238f14382233d632f3242cbf2f2

Contents?: true

Size: 1.28 KB

Versions: 1

Compression:

Stored size: 1.28 KB

Contents

module Fear
  class Success
    include Try
    include Dry::Equalizer(:value)
    include RightBiased::Right

    attr_reader :value
    protected :value

    def initialize(value)
      @value = value
    end

    def get
      @value
    end

    def success?
      true
    end

    # @return [Success] self
    def or_else
      self
    end

    # Transforms a nested `Try`, ie, a `Success` of `Success``,
    # into an un-nested `Try`, ie, a `Success`.
    # @return [Try]
    #
    def flatten
      if value.is_a?(Try)
        value.flatten
      else
        self
      end
    end

    # Converts this to a `Failure` if the predicate
    # is not satisfied.
    # @yieldparam [any] value
    # @yieldreturn [Boolean]
    # @return [Try]
    #
    def detect
      if yield(value)
        self
      else
        fail NoSuchElementError, "Predicate does not hold for `#{value}`"
      end
    rescue => error
      Failure.new(error)
    end

    # @return [Success] self
    #
    def recover_with
      self
    end

    # @return [Success] self
    #
    def recover
      self
    end

    # @return [Try]
    def map
      super
    rescue => error
      Failure.new(error)
    end

    # @return [Try]
    def flat_map
      super
    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/success.rb