From 0ce0cf0c04b53ee6c7038d8912dd1ed433f7935f Mon Sep 17 00:00:00 2001 From: Pratik Naik <pratiknaik@gmail.com> Date: Tue, 20 Oct 2015 17:17:18 -0500 Subject: Allow rejecting subscriptions from the channel --- lib/assets/javascripts/cable.coffee | 1 + lib/assets/javascripts/cable/connection.coffee | 2 ++ lib/assets/javascripts/cable/subscriptions.coffee | 15 +++++++++++++-- 3 files changed, 16 insertions(+), 2 deletions(-) (limited to 'lib/assets') diff --git a/lib/assets/javascripts/cable.coffee b/lib/assets/javascripts/cable.coffee index 476d90ef72..fca5e095b5 100644 --- a/lib/assets/javascripts/cable.coffee +++ b/lib/assets/javascripts/cable.coffee @@ -5,6 +5,7 @@ PING_IDENTIFIER: "_ping" INTERNAL_MESSAGES: SUBSCRIPTION_CONFIRMATION: 'confirm_subscription' + SUBSCRIPTION_REJECTION: 'reject_subscription' createConsumer: (url) -> new Cable.Consumer url diff --git a/lib/assets/javascripts/cable/connection.coffee b/lib/assets/javascripts/cable/connection.coffee index 33159130c7..9de3cc0be4 100644 --- a/lib/assets/javascripts/cable/connection.coffee +++ b/lib/assets/javascripts/cable/connection.coffee @@ -58,6 +58,8 @@ class Cable.Connection switch type when Cable.INTERNAL_MESSAGES.SUBSCRIPTION_CONFIRMATION @consumer.subscriptions.notify(identifier, "connected") + when Cable.INTERNAL_MESSAGES.SUBSCRIPTION_REJECTION + @consumer.subscriptions.rejectSubscription(identifier) else @consumer.subscriptions.notify(identifier, "received", message) diff --git a/lib/assets/javascripts/cable/subscriptions.coffee b/lib/assets/javascripts/cable/subscriptions.coffee index 4efb384ee2..497fcb074e 100644 --- a/lib/assets/javascripts/cable/subscriptions.coffee +++ b/lib/assets/javascripts/cable/subscriptions.coffee @@ -27,11 +27,22 @@ class Cable.Subscriptions for subscription in @subscriptions @sendCommand(subscription, "subscribe") + rejectSubscription: (identifier) -> + subscriptions = @findAll(identifier) + + for subscription in subscriptions + @removeSubscription(subscription) + @notify(subscription, "rejected") + remove: (subscription) -> - @subscriptions = (s for s in @subscriptions when s isnt subscription) + @removeSubscription(subscription) + unless @findAll(subscription.identifier).length @sendCommand(subscription, "unsubscribe") + removeSubscription: (subscription) -> + @subscriptions = (s for s in @subscriptions when s isnt subscription) + findAll: (identifier) -> s for s in @subscriptions when s.identifier is identifier @@ -48,7 +59,7 @@ class Cable.Subscriptions for subscription in subscriptions subscription[callbackName]?(args...) - if callbackName in ["initialized", "connected", "disconnected"] + if callbackName in ["initialized", "connected", "disconnected", "rejected"] {identifier} = subscription @record(notification: {identifier, callbackName, args}) -- cgit v1.2.3 From ee06b33e19019e771f0305a40b15885c22499a8b Mon Sep 17 00:00:00 2001 From: Pratik Naik <pratiknaik@gmail.com> Date: Thu, 22 Oct 2015 10:53:19 -0500 Subject: Better method names in Javascript based on the feedback from @javan --- lib/assets/javascripts/cable/connection.coffee | 13 +++++++----- lib/assets/javascripts/cable/subscriptions.coffee | 24 +++++++++++------------ 2 files changed, 19 insertions(+), 18 deletions(-) (limited to 'lib/assets') diff --git a/lib/assets/javascripts/cable/connection.coffee b/lib/assets/javascripts/cable/connection.coffee index 9de3cc0be4..b6b99413dc 100644 --- a/lib/assets/javascripts/cable/connection.coffee +++ b/lib/assets/javascripts/cable/connection.coffee @@ -55,14 +55,17 @@ class Cable.Connection {identifier, message, type} = JSON.parse(event.data) if type? - switch type - when Cable.INTERNAL_MESSAGES.SUBSCRIPTION_CONFIRMATION - @consumer.subscriptions.notify(identifier, "connected") - when Cable.INTERNAL_MESSAGES.SUBSCRIPTION_REJECTION - @consumer.subscriptions.rejectSubscription(identifier) + @handleTypeMessage(type) else @consumer.subscriptions.notify(identifier, "received", message) + onTypeMessage: (type) -> + switch type + when Cable.INTERNAL_MESSAGES.SUBSCRIPTION_CONFIRMATION + @consumer.subscriptions.notify(identifier, "connected") + when Cable.INTERNAL_MESSAGES.SUBSCRIPTION_REJECTION + @consumer.subscriptions.reject(identifier) + open: -> @disconnected = false @consumer.subscriptions.reload() diff --git a/lib/assets/javascripts/cable/subscriptions.coffee b/lib/assets/javascripts/cable/subscriptions.coffee index 497fcb074e..13db32eb2c 100644 --- a/lib/assets/javascripts/cable/subscriptions.coffee +++ b/lib/assets/javascripts/cable/subscriptions.coffee @@ -23,29 +23,27 @@ class Cable.Subscriptions @notify(subscription, "initialized") @sendCommand(subscription, "subscribe") - reload: -> - for subscription in @subscriptions - @sendCommand(subscription, "subscribe") - - rejectSubscription: (identifier) -> - subscriptions = @findAll(identifier) - - for subscription in subscriptions - @removeSubscription(subscription) - @notify(subscription, "rejected") - remove: (subscription) -> - @removeSubscription(subscription) + @forget(subscription) unless @findAll(subscription.identifier).length @sendCommand(subscription, "unsubscribe") - removeSubscription: (subscription) -> + reject: (identifier) -> + for subscription in @findAll(identifier) + @forget(subscription) + @notify(subscription, "rejected") + + forget: (subscription) -> @subscriptions = (s for s in @subscriptions when s isnt subscription) findAll: (identifier) -> s for s in @subscriptions when s.identifier is identifier + reload: -> + for subscription in @subscriptions + @sendCommand(subscription, "subscribe") + notifyAll: (callbackName, args...) -> for subscription in @subscriptions @notify(subscription, callbackName, args...) -- cgit v1.2.3