aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMark Humphreys <mark@mrlhumphreys.com>2015-08-21 21:41:27 +1000
committerMark Humphreys <mark@mrlhumphreys.com>2015-08-24 19:54:14 +1000
commitc74f8df1217e85d2418da43c74c205b888bc2600 (patch)
treeeb0fe9c7e96b94918772714c212c2ac63583939f
parent6143352f8ffba303f0c7644be7573f6725554cb3 (diff)
downloadrails-c74f8df1217e85d2418da43c74c205b888bc2600.tar.gz
rails-c74f8df1217e85d2418da43c74c205b888bc2600.tar.bz2
rails-c74f8df1217e85d2418da43c74c205b888bc2600.zip
support connection identifiers that don't implement to_global_id by defaulting to to_s
-rw-r--r--lib/action_cable/connection/identification.rb2
-rw-r--r--test/connection/string_identifier_test.rb39
2 files changed, 40 insertions, 1 deletions
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