Sha256: 33748ded0c74e0c7226d56d9565f4bfd523c1f5108663e3064fdf8b8f6d33df7

Contents?: true

Size: 1.37 KB

Versions: 1

Compression:

Stored size: 1.37 KB

Contents

# frozen_string_literal: true

module Fluxo
  class Result
    attr_reader :operation, :type, :value
    attr_accessor :ids

    # @param options [Hash]
    # @option options [Fluxo::Operation] :operation The operation instance that gererated this result
    # @option options [symbol] :type The type of the result. Allowed types: :ok, :failure, :exception
    # @option options [Any] :value The value of the result.
    # @option options [Array<symbol>] :ids An identification to be used with the on_<success|failure|error> handlers
    def initialize(operation:, type:, value:, ids: nil)
      @operation = operation
      @value = value
      @type = type
      @ids = Array(ids)
    end

    # @return [Boolean] true if the result is a success
    def success?
      type == :ok
    end

    # @return [Boolean] true if the result is a failure
    def failure?
      type == :failure
    end

    # @return [Boolean] true if the result is an exception
    def error?
      type == :exception
    end

    def on_success(*handler_ids)
      tap { yield(self) if success? && (handler_ids.none? || (ids & handler_ids).any?) }
    end

    def on_failure(*handler_ids)
      tap { yield(self) if failure? && (handler_ids.none? || (ids & handler_ids).any?) }
    end

    def on_error(*handler_ids)
      tap { yield(self) if error? && (handler_ids.none? || (ids & handler_ids).any?) }
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
fluxo-0.2.0 lib/fluxo/result.rb