Sha256: f07b0774048b4adf70a442849c81bd80ca275a132d10288965025520c6700803

Contents?: true

Size: 1.16 KB

Versions: 2

Compression:

Stored size: 1.16 KB

Contents

# frozen_string_literal: true

module Mutant
  # Isolation mechanism
  class Isolation
    include AbstractType

    # Isolated computation result
    class Result
      include AbstractType, Adamantium

      abstract_method :error
      abstract_method :next
      abstract_method :value

      # Add error on top of current result
      #
      # @param [Result] error
      #
      # @return [Result]
      def add_error(error)
        ErrorChain.new(error, self)
      end

      # Test for success
      #
      # @return [Boolean]
      def success?
        instance_of?(Success)
      end

      # Succesful result producing value
      class Success < self
        include Concord::Public.new(:value)
      end # Success

      # Unsuccessful result by unexpected exception
      class Exception < self
        include Concord::Public.new(:value)
      end # Error

      # Result when there where many results
      class ErrorChain < Result
        include Concord::Public.new(:value, :next)
      end # ChainError
    end # Result

    # Call block in isolation
    #
    # @return [Result]
    #   the blocks result
    abstract_method :call
  end # Isolation
end # Mutant

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
mutant-0.8.24 lib/mutant/isolation.rb
mutant-0.8.23 lib/mutant/isolation.rb