diff options
author | Kasper Timm Hansen <kaspth@gmail.com> | 2019-03-11 13:54:28 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-03-11 13:54:28 +0100 |
commit | 33800d2330e1c7d36dcbb5150857cfb33fc45379 (patch) | |
tree | 104fc7bd515bde3353b9043caa4d243b6516326e /actioncable | |
parent | b3e6d5fa36c047ea826ad03f90a801f53c3b6820 (diff) | |
parent | 9333f86adba465fc1cac0fce9a1399f609781f23 (diff) | |
download | rails-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.js | 8 | ||||
-rw-r--r-- | actioncable/test/javascript/src/unit/action_cable_test.js | 8 |
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) + }) }) }) |