module Delayer::Deferred::Tools
Public Instance Methods
fail(value)
click to toggle source
next(&proc)
click to toggle source
# File lib/delayer/deferred/tools.rb, line 4 def next(&proc) new.next(&proc) end
system(*args)
click to toggle source
Kernel#systemを呼び出して、コマンドが成功たら成功するDeferredを返す。 失敗した場合、trap{}ブロックには $? の値(Process::Status)か、例外が発生した場合それが渡される
Args¶ ↑
- *args
-
Kernel#system の引数
Return¶ ↑
# File lib/delayer/deferred/tools.rb, line 44 def system(*args) delayer.Deferred.Thread.new do if Kernel.system(*args) $? else delayer.Deferred.fail($?) end end end
trap(&proc)
click to toggle source
# File lib/delayer/deferred/tools.rb, line 7 def trap(&proc) new.trap(&proc) end
when(*args)
click to toggle source
複数のdeferredを引数に取って、それら全ての実行が終了したら、 その結果を引数の順番通りに格納したArrayを引数に呼ばれるDeferredを返す。 引数のDeferredが一つでも失敗するとこのメソッドの返すDeferredも失敗する。
Args¶ ↑
- *args
-
終了を待つDeferredオブジェクト
Return¶ ↑
# File lib/delayer/deferred/tools.rb, line 26 def when(*args) return self.next{[]} if args.empty? defer, *follow = args raise TypeError, "Argument of Deferred.when must be Delayer::Deferred::Deferredable" unless defer.is_a? Delayer::Deferred::Deferredable if follow.empty? defer.next{|res| [res] } else remain = self.when(*follow) defer.next do |res| remain.next do |follow_res| follow_res.unshift(res) end end end end