Sha256: 6e4d7b4303d3c8e6a18423339da8744dd7aee1c7f11246addc60deb4d3278d88

Contents?: true

Size: 1.54 KB

Versions: 1

Compression:

Stored size: 1.54 KB

Contents

# encoding: utf-8

require 'concord'
require 'abstract_type'

# Operation result class
module Orc

  # Abstract base class for a result returned from some computation
  class Result

    # Create a result indicating success
    #
    # @param [Object] object
    #   arbitrary data associated with the result
    #
    # @return [Success]
    def self.success(object)
      Success.new(object)
    end

    # Create a result indicating failure
    #
    # @param [Object] object
    #   context information associated with the failure
    #
    # @param [Object] status
    #   an optional, arbitrary status description (symbol)
    #
    # @return [Success]
    def self.failure(object, status = :failure)
      Failure.new(object, status)
    end

    include AbstractType

    abstract_method :success?
    abstract_method :status

    attr_reader :object

    alias_method :output, :object
    alias_method :data,   :object

    # Result object indicating success along with associated data
    class Success < self
      include Concord::Public.new(:object)

      # Indicate success
      #
      # @return [true]
      def success?
        true
      end

      # Status description
      #
      # @return [:success]
      def status
        :success
      end
    end # Success

    # Result object indicating failure along with status and context
    class Failure < self
      include Concord::Public.new(:object, :status)

      # Indicate success
      #
      # @return [false]
      def success?
        false
      end
    end # Failure
  end # Result
end # Orc

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
orc-0.0.3 lib/orc.rb