Class: Delayer::Deferred::Worker
- Inherits:
-
Object
- Object
- Delayer::Deferred::Worker
- Defined in:
- lib/delayer/deferred/worker.rb
Overview
Deferredを実行するためのWorker。Deferredチェインを実行するFiberを 管理する。
pushに渡すオブジェクトについて
Worker#push に渡す引数は、activateメソッドを実装している必要がある。
activate(response)
Args
- response
-
Delayer::Deferred::Response::Base Deferredに渡す値
Returns
- Delayer::Deferred::Response::Base
-
これを返すと、値の自動変換が行われないため、意図的に失敗させたり、Deferredを次のブロックに伝搬させることができる。
- Delayer::Deferred::Chainable
-
戻り値のDeferredが終わるまでWorkerの処理を停止する。 再開された時、結果は戻り値のDeferredの結果に置き換えられる。
- else
-
Delayer::Deferred::Response::Ok.new の引数に渡され、その結果が利用される
Instance Method Summary collapse
-
#give_response(response, deferred) ⇒ Object
Awaitから復帰した時に呼ばれる。 ==== Args [response] Awaitの結果(Delayer::Deferred::Response::Base) [deferred] 現在実行中のDeferred.
-
#initialize(delayer:, initial:) ⇒ Worker
constructor
A new instance of Worker.
- #push(deferred) ⇒ Object
-
#resume_pass(deferred) ⇒ Object
Tools#pass から復帰した時に呼ばれる。 ==== Args [deferred] 現在実行中のDeferred.
Constructor Details
#initialize(delayer:, initial:) ⇒ Worker
Returns a new instance of Worker.
26 27 28 |
# File 'lib/delayer/deferred/worker.rb', line 26 def initialize(delayer:, initial:) @delayer, @initial = delayer, initial end |
Instance Method Details
#give_response(response, deferred) ⇒ Object
Awaitから復帰した時に呼ばれる。
Args
- response
-
Awaitの結果(Delayer::Deferred::Response::Base)
- deferred
-
現在実行中のDeferred
49 50 51 52 53 54 55 56 57 |
# File 'lib/delayer/deferred/worker.rb', line 49 def give_response(response, deferred) @delayer.new do next if deferred.spoiled? deferred.exit_await fiber.resume(response).accept_request(worker: self, deferred: deferred) end nil end |
#push(deferred) ⇒ Object
30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
# File 'lib/delayer/deferred/worker.rb', line 30 def push(deferred) deferred.reserve_activate @delayer.new do next if deferred.spoiled? begin fiber.resume(deferred).accept_request(worker: self, deferred: deferred) rescue Delayer::Deferred::SequenceError => err err.deferred = deferred raise end end nil end |
#resume_pass(deferred) ⇒ Object
Tools#pass から復帰した時に呼ばれる。
Args
- deferred
-
現在実行中のDeferred
62 63 64 65 66 67 68 69 |
# File 'lib/delayer/deferred/worker.rb', line 62 def resume_pass(deferred) deferred.exit_pass @delayer.new do next if deferred.spoiled? fiber.resume(nil).accept_request(worker: self, deferred: deferred) end end |