From c74f8df1217e85d2418da43c74c205b888bc2600 Mon Sep 17 00:00:00 2001 From: Mark Humphreys Date: Fri, 21 Aug 2015 21:41:27 +1000 Subject: support connection identifiers that don't implement to_global_id by defaulting to to_s --- lib/action_cable/connection/identification.rb | 2 +- test/connection/string_identifier_test.rb | 39 +++++++++++++++++++++++++++ 2 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 test/connection/string_identifier_test.rb diff --git a/lib/action_cable/connection/identification.rb b/lib/action_cable/connection/identification.rb index 1be6f9ac76..701e6885ad 100644 --- a/lib/action_cable/connection/identification.rb +++ b/lib/action_cable/connection/identification.rb @@ -27,7 +27,7 @@ module ActionCable private def connection_gid(ids) - ids.map { |o| o.to_global_id.to_s }.sort.join(":") + ids.map { |o| (o.try(:to_global_id) || o).to_s }.sort.join(":") end end end diff --git a/test/connection/string_identifier_test.rb b/test/connection/string_identifier_test.rb new file mode 100644 index 0000000000..87a9025008 --- /dev/null +++ b/test/connection/string_identifier_test.rb @@ -0,0 +1,39 @@ +require 'test_helper' +require 'stubs/test_server' + +class ActionCable::Connection::StringIdentifierTest < ActiveSupport::TestCase + class Connection < ActionCable::Connection::Base + identified_by :current_token + + def connect + self.current_token = "random-string" + end + end + + setup do + @server = TestServer.new + + env = Rack::MockRequest.env_for "/test", 'HTTP_CONNECTION' => 'upgrade', 'HTTP_UPGRADE' => 'websocket' + @connection = Connection.new(@server, env) + end + + test "connection identifier" do + open_connection_with_stubbed_pubsub + assert_equal "random-string", @connection.connection_identifier + end + + protected + def open_connection_with_stubbed_pubsub + @server.stubs(:pubsub).returns(stub_everything('pubsub')) + open_connection + end + + def open_connection + @connection.process + @connection.send :on_open + end + + def close_connection + @connection.send :on_close + end +end -- cgit v1.2.3