add support for more than one callback

This commit is contained in:
Konstantin Haase 2011-10-02 23:39:23 -07:00
parent 0ab52943f5
commit 91cafec437
3 changed files with 16 additions and 3 deletions

View File

@ -1,5 +1,8 @@
= 1.3.1 / Not Yet Released
* Support adding more than one callback to the stream object. (Konstantin
Haase)
= 1.3.0 / 2011-09-30
* Added `stream` helper method for easily creating streaming APIs, Server

View File

@ -247,11 +247,11 @@ module Sinatra
def self.defer(*) yield end
def initialize(scheduler = self.class, keep_open = false, &back)
@back, @scheduler, @callback, @keep_open = back.to_proc, scheduler, nil, keep_open
@back, @scheduler, @callbacks, @keep_open = back.to_proc, scheduler, [], keep_open
end
def close
@scheduler.schedule { @callback.call if @callback }
@scheduler.schedule { @callbacks.each { |c| c.call }}
end
def each(&front)
@ -272,7 +272,7 @@ module Sinatra
end
def callback(&block)
@callback = block
@callbacks << block
end
alias errback callback

View File

@ -56,6 +56,16 @@ class StreamingTest < Test::Unit::TestCase
assert_equal 0, final
end
it 'allows adding more than one callback' do
a = b = false
stream = Stream.new { }
stream.callback { a = true }
stream.callback { b = true }
stream.each { |str| }
assert a, 'should trigger first callback'
assert b, 'should trigger second callback'
end
class MockScheduler
def initialize(*) @schedule, @defer = [], [] end
def schedule(&block) @schedule << block end