aboutsummaryrefslogtreecommitdiffstats
path: root/actioncable
diff options
context:
space:
mode:
authorKasper Timm Hansen <kaspth@gmail.com>2019-03-11 13:54:28 +0100
committerGitHub <noreply@github.com>2019-03-11 13:54:28 +0100
commit33800d2330e1c7d36dcbb5150857cfb33fc45379 (patch)
tree104fc7bd515bde3353b9043caa4d243b6516326e /actioncable
parentb3e6d5fa36c047ea826ad03f90a801f53c3b6820 (diff)
parent9333f86adba465fc1cac0fce9a1399f609781f23 (diff)
downloadrails-33800d2330e1c7d36dcbb5150857cfb33fc45379.tar.gz
rails-33800d2330e1c7d36dcbb5150857cfb33fc45379.tar.bz2
rails-33800d2330e1c7d36dcbb5150857cfb33fc45379.zip
Merge pull request #35525 from audiolion/feature/dynamic-actioncable-websocket-url
feat(js): Dynamic Actioncable WebSocket URL
Diffstat (limited to 'actioncable')
-rw-r--r--actioncable/app/javascript/action_cable/index.js8
-rw-r--r--actioncable/test/javascript/src/unit/action_cable_test.js8
2 files changed, 13 insertions, 3 deletions
diff --git a/actioncable/app/javascript/action_cable/index.js b/actioncable/app/javascript/action_cable/index.js
index 659418396f..e9892ee821 100644
--- a/actioncable/app/javascript/action_cable/index.js
+++ b/actioncable/app/javascript/action_cable/index.js
@@ -30,14 +30,16 @@ export function getConfig(name) {
}
export function createWebSocketURL(url) {
- if (url && !/^wss?:/i.test(url)) {
+ const webSocketURL = typeof url === 'function' ? url() : url;
+
+ if (webSocketURL && !/^wss?:/i.test(webSocketURL)) {
const a = document.createElement("a")
- a.href = url
+ a.href = webSocketURL
// Fix populating Location properties in IE. Otherwise, protocol will be blank.
a.href = a.href
a.protocol = a.protocol.replace("http", "ws")
return a.href
} else {
- return url
+ return webSocketURL
}
}
diff --git a/actioncable/test/javascript/src/unit/action_cable_test.js b/actioncable/test/javascript/src/unit/action_cable_test.js
index 83426fa32e..c9d34abc6d 100644
--- a/actioncable/test/javascript/src/unit/action_cable_test.js
+++ b/actioncable/test/javascript/src/unit/action_cable_test.js
@@ -41,5 +41,13 @@ module("ActionCable", () => {
assert.equal(consumer.url, testURL)
})
+
+ test("uses function to generate URL", assert => {
+ const generateURL = () => {
+ return testURL
+ }
+ const consumer = ActionCable.createConsumer(generateURL)
+ assert.equal(consumer.url, testURL)
+ })
})
})