class Rpromise

Constants

Handler
VERSION

Attributes

state[R]
thread[R]

Public Class Methods

from_method(obj, method_name, *args, &block) click to toggle source
# File lib/rpromise.rb, line 73
def self.from_method(obj, method_name, *args, &block)
  Rpromise.new do |resolve, reject|
    resolve.call(obj.method(method_name).call(*args,&block))
  end
end
new() { |method(:resolve!), method(:reject!)| ... } click to toggle source
# File lib/rpromise.rb, line 15
def initialize()
  @state = State::PENDING
  @defered = nil
  @thread = Thread.new do
    begin
      yield(method(:resolve!), method(:reject!))
    rescue => e
      reject!(e)
    end
  end
  @thread.abort_on_exception = true
end

Public Instance Methods

pending?() click to toggle source
# File lib/rpromise.rb, line 38
def pending?
  return @state == State::PENDING
end
reject!(value = nil) click to toggle source
# File lib/rpromise.rb, line 64
def reject!(value = nil)
  @state = State::REJECTED
  @value = value

  unless @defered.nil?
    handle(@defered)
  end
end
rejected?() click to toggle source
# File lib/rpromise.rb, line 46
def rejected?
  return @state == State::REJECTED
end
resolve!(value = nil) click to toggle source
# File lib/rpromise.rb, line 50
def resolve!(value = nil)
  if value.is_a?(::Rpromise)
    value.then(method(:resolve!), method(:reject!))
    return
  end

  @state = State::RESOLVED
  @value = value

  unless @defered.nil?
    handle(@defered)
  end
end
resolved?() click to toggle source
# File lib/rpromise.rb, line 42
def resolved?
  return @state == State::RESOLVED
end
then(on_resolved = nil, on_rejected = nil) click to toggle source
# File lib/rpromise.rb, line 28
def then(on_resolved = nil, on_rejected = nil)
  raise ArgumentError unless is_valid_block?(on_resolved)
  raise ArgumentError unless is_valid_block?(on_rejected)
  return self if on_resolved.nil? && on_rejected.nil?
  return ::Rpromise.new do |resolve, reject|
    handler = Handler.new(on_resolved, on_rejected, resolve, reject)
    handle(handler)
  end
end

Protected Instance Methods

handle(handler) click to toggle source
# File lib/rpromise.rb, line 85
def handle(handler)
  if pending?
    @defered = handler
    return nil
  end

  callback = nil

  if resolved?
    callback = handler.on_resolved
  else
    callback = handler.on_rejected
  end

  unless callback.nil?
    output = nil
    output = callback.call(@value)
    handler.resolve.call(output) unless handler.resolve.nil?
  end
end
is_valid_block?(arg) click to toggle source
# File lib/rpromise.rb, line 81
def is_valid_block?(arg)
  return arg.nil? || arg.is_a?(Proc) || arg.is_a?(Method)
end