Module: Rack::Async::Deferrable

Included in:
BlockingBody, CallbackBody
Defined in:
lib/rack/async.rb

Instance Method Summary collapse

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