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