From 91cafec437ed717923cc7bdd8f9307ecb3cfea09 Mon Sep 17 00:00:00 2001 From: Konstantin Haase Date: Sun, 2 Oct 2011 23:39:23 -0700 Subject: [PATCH] add support for more than one callback --- CHANGES | 3 +++ lib/sinatra/base.rb | 6 +++--- test/streaming_test.rb | 10 ++++++++++ 3 files changed, 16 insertions(+), 3 deletions(-) diff --git a/CHANGES b/CHANGES index 2b0f56c6..4212234b 100644 --- a/CHANGES +++ b/CHANGES @@ -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 diff --git a/lib/sinatra/base.rb b/lib/sinatra/base.rb index bb67cc60..3b6fffe7 100644 --- a/lib/sinatra/base.rb +++ b/lib/sinatra/base.rb @@ -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 diff --git a/test/streaming_test.rb b/test/streaming_test.rb index f3dc91d4..15afb55e 100644 --- a/test/streaming_test.rb +++ b/test/streaming_test.rb @@ -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