Module: Delayer::Deferred::Deferredable::Chainable
- Includes:
- Awaitable, Graph, NodeSequence
- Included in:
- Chain::Base, Trigger
- Defined in:
- lib/delayer/deferred/deferredable/chainable.rb
Constant Summary
Constants included from NodeSequence
NodeSequence::AWAIT, NodeSequence::AWAIT_C, NodeSequence::BURST_OUT, NodeSequence::CALL_CHILD, NodeSequence::CONNECTED, NodeSequence::FRESH, NodeSequence::GENOCIDE, NodeSequence::GRAFT, NodeSequence::GRAFT_C, NodeSequence::PASS, NodeSequence::PASS_C, NodeSequence::RESERVED, NodeSequence::RESERVED_C, NodeSequence::ROTTEN, NodeSequence::RUN, NodeSequence::RUN_C, NodeSequence::SEQUENCE_LOCK, NodeSequence::STOP, NodeSequence::WAIT
Instance Attribute Summary collapse
-
#child ⇒ Object
readonly
Returns the value of attribute child.
Instance Method Summary collapse
- #add_awaited(awaitable) ⇒ Object
-
#add_child(chainable) ⇒ Object
子を追加する。 Delayer::Deferred::Chainable を直接指定できる。通常外部から呼ぶときは next か trap メソッドを使うこと。 このメソッドはスレッドセーフです。 ==== Args [chainable] 子となるDeferred ==== Return 必ず chainable を返す ==== Raise [Delayer::Deferred::SequenceError] 既に子が存在している場合.
-
#add_child_observer(observer) ⇒ Object
子が追加された時に一度だけコールバックするオブジェクトを登録する。 observerと言っているが、実際には Delayer::Deferred::Worker を渡して利用している。 このメソッドはスレッドセーフです。 ==== Args [observer] pushメソッドを備えているもの。引数に _@child_ の値が渡される ==== Return self.
- #awaited ⇒ Object
-
#cancel ⇒ Object
この一連のDeferredをこれ以上実行しない。 このメソッドはスレッドセーフです。.
- #enter_pass ⇒ Object
- #exit_pass ⇒ Object
- #has_awaited? ⇒ Boolean
- #has_child? ⇒ Boolean
-
#next(&proc) ⇒ Object
(also: #deferred)
このDeferredが成功した場合の処理を追加する。 新しいDeferredのインスタンスを返す。 このメソッドはスレッドセーフです。 TODO: procが空のとき例外を発生させる.
-
#reserve_activate ⇒ Object
activateメソッドを呼ぶDelayerジョブを登録する寸前に呼ばれる。.
-
#trap(&proc) ⇒ Object
(also: #error)
このDeferredが失敗した場合の処理を追加する。 新しいDeferredのインスタンスを返す。 このメソッドはスレッドセーフです。 TODO: procが空のとき例外を発生させる.
Methods included from NodeSequence
#activated?, #change_sequence, #sequence, #spoiled?
Methods included from Graph
#graph, #graph_child, #graph_draw, #graph_save
Methods included from Awaitable
#+@, #enter_await, #exit_await
Instance Attribute Details
#child ⇒ Object (readonly)
Returns the value of attribute child.
12 13 14 |
# File 'lib/delayer/deferred/deferredable/chainable.rb', line 12 def child @child end |
Instance Method Details
#add_awaited(awaitable) ⇒ Object
81 82 83 84 |
# File 'lib/delayer/deferred/deferredable/chainable.rb', line 81 def add_awaited(awaitable) @awaited = [*awaited, awaitable].freeze self end |
#add_child(chainable) ⇒ Object
子を追加する。 Delayer::Deferred::Chainable を直接指定できる。通常外部から呼ぶときは next か trap メソッドを使うこと。 このメソッドはスレッドセーフです。
Args
- chainable
-
子となるDeferred
Return
必ず chainable を返す
Raise
- Delayer::Deferred::SequenceError
-
既に子が存在している場合
52 53 54 55 56 57 |
# File 'lib/delayer/deferred/deferredable/chainable.rb', line 52 def add_child(chainable) change_sequence(:get_child) do chainable.parent = self @child = chainable end end |
#add_child_observer(observer) ⇒ Object
子が追加された時に一度だけコールバックするオブジェクトを登録する。 observerと言っているが、実際には Delayer::Deferred::Worker を渡して利用している。 このメソッドはスレッドセーフです。
Args
- observer
-
pushメソッドを備えているもの。引数に _@child_ の値が渡される
Return
self
66 67 68 69 70 71 |
# File 'lib/delayer/deferred/deferredable/chainable.rb', line 66 def add_child_observer(observer) change_sequence(:gaze) do @child_observer = observer end self end |
#awaited ⇒ Object
73 74 75 |
# File 'lib/delayer/deferred/deferredable/chainable.rb', line 73 def awaited @awaited ||= [].freeze end |
#cancel ⇒ Object
この一連のDeferredをこれ以上実行しない。 このメソッドはスレッドセーフです。
34 35 36 |
# File 'lib/delayer/deferred/deferredable/chainable.rb', line 34 def cancel change_sequence(:genocide) unless spoiled? end |
#enter_pass ⇒ Object
91 92 93 |
# File 'lib/delayer/deferred/deferredable/chainable.rb', line 91 def enter_pass change_sequence(:pass) end |
#exit_pass ⇒ Object
95 96 97 |
# File 'lib/delayer/deferred/deferredable/chainable.rb', line 95 def exit_pass change_sequence(:resume) end |
#has_awaited? ⇒ Boolean
77 78 79 |
# File 'lib/delayer/deferred/deferredable/chainable.rb', line 77 def has_awaited? not awaited.empty? end |
#has_child? ⇒ Boolean
38 39 40 |
# File 'lib/delayer/deferred/deferredable/chainable.rb', line 38 def has_child? child ? true : false end |
#next(&proc) ⇒ Object Also known as: deferred
このDeferredが成功した場合の処理を追加する。 新しいDeferredのインスタンスを返す。 このメソッドはスレッドセーフです。 TODO: procが空のとき例外を発生させる
18 19 20 |
# File 'lib/delayer/deferred/deferredable/chainable.rb', line 18 def next(&proc) add_child(Delayer::Deferred::Chain::Next.new(&proc)) end |
#reserve_activate ⇒ Object
activateメソッドを呼ぶDelayerジョブを登録する寸前に呼ばれる。
87 88 89 |
# File 'lib/delayer/deferred/deferredable/chainable.rb', line 87 def reserve_activate change_sequence(:reserve) end |