diff options
-rw-r--r-- | actioncable/lib/action_cable/channel/streams.rb | 1 | ||||
-rw-r--r-- | actioncable/test/channel/stream_test.rb | 17 |
2 files changed, 18 insertions, 0 deletions
diff --git a/actioncable/lib/action_cable/channel/streams.rb b/actioncable/lib/action_cable/channel/streams.rb index 3e3be4cd44..28092a8b2b 100644 --- a/actioncable/lib/action_cable/channel/streams.rb +++ b/actioncable/lib/action_cable/channel/streams.rb @@ -72,6 +72,7 @@ module ActionCable # Start streaming from the named <tt>broadcasting</tt> pubsub queue. Optionally, you can pass a <tt>callback</tt> that'll be used # instead of the default of just transmitting the updates straight to the subscriber. def stream_from(broadcasting, callback = nil) + broadcasting = String(broadcasting) # Don't send the confirmation until pubsub#subscribe is successful defer_subscription_confirmation! diff --git a/actioncable/test/channel/stream_test.rb b/actioncable/test/channel/stream_test.rb index ecbee52a4f..526ea92e4f 100644 --- a/actioncable/test/channel/stream_test.rb +++ b/actioncable/test/channel/stream_test.rb @@ -16,6 +16,12 @@ class ActionCable::Channel::StreamTest < ActionCable::TestCase end end + class SymbolChannel < ActionCable::Channel::Base + def subscribed + stream_from :channel + end + end + test "streaming start and stop" do run_in_eventmachine do connection = TestConnection.new @@ -27,6 +33,17 @@ class ActionCable::Channel::StreamTest < ActionCable::TestCase end end + test "stream from non-string channel" do + run_in_eventmachine do + connection = TestConnection.new + connection.expects(:pubsub).returns mock().tap { |m| m.expects(:subscribe).with("channel", kind_of(Proc), kind_of(Proc)).returns stub_everything(:pubsub) } + channel = SymbolChannel.new connection, "" + + connection.expects(:pubsub).returns mock().tap { |m| m.expects(:unsubscribe) } + channel.unsubscribe_from_channel + end + end + test "stream_for" do run_in_eventmachine do connection = TestConnection.new |