class Obligation::Dependent

Public Class Methods

new(dependencies, &block) click to toggle source
Calls superclass method Obligation::Base::new
# File lib/obligation/impl.rb, line 120
def initialize(dependencies, &block)
  super()
  @dependencies = dependencies
  @block        = block
  @reason       = nil
  @result       = nil
end

Protected Instance Methods

_nested(result) click to toggle source
# File lib/obligation/impl.rb, line 155
def _nested(result)
  return result.value if result.respond_to? :value

  result
end
_resolved_dependencies() click to toggle source
# File lib/obligation/impl.rb, line 149
def _resolved_dependencies
  return @dependencies.map(&:value) if @dependencies.is_a?(Array)

  @dependencies.value
end
_value(timeout) click to toggle source
# File lib/obligation/impl.rb, line 130
def _value(timeout)
  @mutex.synchronize do
    if _sync_pending?
      begin
        _sync_fulfill _nested @block.call _resolved_dependencies
      rescue RejectedError => e
        _sync_reject e.cause
        raise RejectedError.new "Obligation rejected due to #{e.cause}."
      end
    end

    case @state
      when :fulfilled then @result
      when :rejected  then raise RejectedError.new \
        "Obligation rejected due to #{@reason}.", @reason
    end
  end
end