class Thread

Public Class Methods

delayer() click to toggle source
# File lib/delayer/deferred/thread.rb, line 7
def self.delayer
  Delayer
end

Public Instance Methods

add_child(chainable, name: caller_locations(1,1).first.to_s) click to toggle source
# File lib/delayer/deferred/thread.rb, line 29
def add_child(chainable, name: caller_locations(1,1).first.to_s)
  __gen_promise(name).add_child(chainable)
end
deferred(name: caller_locations(1,1).first.to_s, &proc)
Alias for: next
error(name: caller_locations(1,1).first.to_s, &proc)
Alias for: trap
next(name: caller_locations(1,1).first.to_s, &proc) click to toggle source

このDeferredが成功した場合の処理を追加する。 新しいDeferredのインスタンスを返す。 このメソッドはスレッドセーフです。 TODO: procが空のとき例外を発生させる

# File lib/delayer/deferred/thread.rb, line 15
def next(name: caller_locations(1,1).first.to_s, &proc)
  add_child(Delayer::Deferred::Chain::Next.new(&proc), name: name)
end
Also aliased as: deferred
trap(name: caller_locations(1,1).first.to_s, &proc) click to toggle source

このDeferredが失敗した場合の処理を追加する。 新しいDeferredのインスタンスを返す。 このメソッドはスレッドセーフです。 TODO: procが空のとき例外を発生させる

# File lib/delayer/deferred/thread.rb, line 24
def trap(name: caller_locations(1,1).first.to_s, &proc)
  add_child(Delayer::Deferred::Chain::Trap.new(&proc), name: name)
end
Also aliased as: error

Private Instance Methods

__gen_promise(name) click to toggle source
# File lib/delayer/deferred/thread.rb, line 35
def __gen_promise(name)
  promise = self.class.delayer.Promise.new(true, name: name)
  Thread.new(self) do |tt|
    __promise_callback(tt, promise)
  end
  promise
end
__promise_callback(tt, promise) click to toggle source
# File lib/delayer/deferred/thread.rb, line 43
def __promise_callback(tt, promise)
  begin
    result = tt.value
    self.class.delayer.new do
      promise.call(result)
    end
  rescue Exception => err
    self.class.delayer.new do
      promise.fail(err)
    end
  end
end