Module: Rack::Async::Deferrable
- Included in:
- BlockingBody, CallbackBody
- Defined in:
- lib/rack/async.rb
Instance Method Summary collapse
- #callback(&block) ⇒ Object
- #errback(&block) ⇒ Object
- #fail(*args) ⇒ Object (also: #set_deferred_failure)
- #set_deferred_status(status, *args) ⇒ Object
- #succeed(*args) ⇒ Object (also: #finish, #set_deferred_success)
Instance Method Details
#callback(&block) ⇒ Object
78 79 80 81 82 83 84 |
# File 'lib/rack/async.rb', line 78 def callback(&block) if @deferred_status == :succeeded block.call(*@deferred_args) elsif @deferred_status != :failed @callbacks.unshift(block) end end |
#errback(&block) ⇒ Object
86 87 88 89 90 91 92 |
# File 'lib/rack/async.rb', line 86 def errback(&block) if @deferred_status == :failed block.call(*@deferred_args) elsif @deferred_status != :succeeded @errbacks.unshift(block) end end |
#fail(*args) ⇒ Object Also known as: set_deferred_failure
73 74 75 |
# File 'lib/rack/async.rb', line 73 def fail(*args) set_deferred_status(:failed) end |
#set_deferred_status(status, *args) ⇒ Object
53 54 55 56 57 58 59 60 61 62 63 64 65 |
# File 'lib/rack/async.rb', line 53 def set_deferred_status(status, *args) @deferred_status = status @deferred_args = args iterator = Proc.new {|block| block.call(*@deferred_args)} case status when :succeeded @callbacks.each(&iterator) when :failed @errbacks.each(&iterator) end @callbacks.clear @errbacks.clear end |
#succeed(*args) ⇒ Object Also known as: finish, set_deferred_success
67 68 69 |
# File 'lib/rack/async.rb', line 67 def succeed(*args) set_deferred_status(:succeeded) end |