Module: Delayer::Deferred
- Extended by:
- Deferred
- Included in:
- Deferred
- Defined in:
- lib/delayer/deferred.rb,
lib/delayer/deferred/version.rb,
lib/delayer/deferred/deferred.rb
Defined Under Namespace
Modules: Deferredable Classes: Deferred
Constant Summary collapse
- VERSION =
"1.0.0"
Instance Attribute Summary collapse
-
#debug ⇒ Object
真ならデバッグ情報を集める.
Instance Method Summary collapse
-
#fail(value) ⇒ Object
実行中のDeferredを失敗させる。raiseと違って、Exception以外のオブジェクトをtrap()に渡すことができる。 Deferredのnextとtrapの中でだけ呼び出すことができる。 ==== Args [value] trap()に渡す値 ==== Throw :__deferredable_fail をthrowする.
-
#system(*args) ⇒ Object
Kernel#systemを呼び出して、コマンドが成功たら成功するDeferredを返す。 失敗した場合、trap{}ブロックには $? の値(Process::Status)か、例外が発生した場合それが渡される ==== Args [*args] Kernel#system の引数 ==== Return Deferred.
-
#when(defer, *follow) ⇒ Object
複数のdeferredを引数に取って、それら全ての実行が終了したら、 その結果を引数の順番通りに格納したArrayを引数に呼ばれるDeferredを返す。 引数のDeferredが一つでも失敗するとこのメソッドの返すDeferredも失敗する。 ==== Args [defer] 終了を待つDeferredオブジェクト [*follow] 他のDeferredオブジェクト ==== Return Deferred.
Instance Attribute Details
#debug ⇒ Object
真ならデバッグ情報を集める
15 16 17 |
# File 'lib/delayer/deferred.rb', line 15 def debug @debug end |
Instance Method Details
#fail(value) ⇒ Object
実行中のDeferredを失敗させる。raiseと違って、Exception以外のオブジェクトをtrap()に渡すことができる。Deferredのnextとtrapの中でだけ呼び出すことができる。
Args
- value
-
trap()に渡す値
Throw
:__deferredable_fail をthrowする
23 24 |
# File 'lib/delayer/deferred.rb', line 23 def fail(value) throw(:__deferredable_fail, value) end |
#system(*args) ⇒ Object
Kernel#systemを呼び出して、コマンドが成功たら成功するDeferredを返す。失敗した場合、trap{}ブロックには $? の値(Process::Status)か、例外が発生した場合それが渡される
Args
- *args
-
Kernel#system の引数
Return
Deferred
50 51 52 53 54 55 |
# File 'lib/delayer/deferred.rb', line 50 def system(*args) delayer.Deferred.Thread.new do if Kernel.system(*args) $? else delayer.Deferred.fail($?) end end end |
#when(defer, *follow) ⇒ Object
複数のdeferredを引数に取って、それら全ての実行が終了したら、その結果を引数の順番通りに格納したArrayを引数に呼ばれるDeferredを返す。引数のDeferredが一つでも失敗するとこのメソッドの返すDeferredも失敗する。
Args
- defer
-
終了を待つDeferredオブジェクト
- *follow
-
他のDeferredオブジェクト
Return
Deferred
34 35 36 37 38 39 40 41 42 |
# File 'lib/delayer/deferred.rb', line 34 def when(defer, *follow) 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 |