aboutsummaryrefslogtreecommitdiffstats
path: root/lib/assets
diff options
context:
space:
mode:
authorJavan Makhmali <javan@javan.us>2015-06-25 11:36:40 -0400
committerJavan Makhmali <javan@javan.us>2015-06-25 11:36:40 -0400
commitd9d7371c568fe99ef460202ebe7217bfed050e88 (patch)
tree0fa912f37d97b855d476e7caa484cf40ea1b18a5 /lib/assets
parent53d0b22aeeba1a585abe47b4a9417462b812d1a4 (diff)
downloadrails-d9d7371c568fe99ef460202ebe7217bfed050e88.tar.gz
rails-d9d7371c568fe99ef460202ebe7217bfed050e88.tar.bz2
rails-d9d7371c568fe99ef460202ebe7217bfed050e88.zip
Assume subscribers have an identifier
Diffstat (limited to 'lib/assets')
-rw-r--r--lib/assets/javascripts/cable.js.coffee7
-rw-r--r--lib/assets/javascripts/cable/channel.js.coffee6
-rw-r--r--lib/assets/javascripts/cable/subscriber_manager.js.coffee35
3 files changed, 26 insertions, 22 deletions
diff --git a/lib/assets/javascripts/cable.js.coffee b/lib/assets/javascripts/cable.js.coffee
index 4c93f8f062..86e08e15c0 100644
--- a/lib/assets/javascripts/cable.js.coffee
+++ b/lib/assets/javascripts/cable.js.coffee
@@ -13,8 +13,5 @@ class @Cable
params = if typeof channel is "object" then channel else {channel}
new Cable.Channel this, params, mixin
- sendMessage: (identifier, data) ->
- @sendCommand(identifier, "message", data)
-
- sendCommand: (identifier, command, data) ->
- @connection.send({identifier, command, data})
+ send: (data) ->
+ @connection.send(data)
diff --git a/lib/assets/javascripts/cable/channel.js.coffee b/lib/assets/javascripts/cable/channel.js.coffee
index bbdc9c5589..9168a76d3c 100644
--- a/lib/assets/javascripts/cable/channel.js.coffee
+++ b/lib/assets/javascripts/cable/channel.js.coffee
@@ -2,7 +2,7 @@ class Cable.Channel
constructor: (@cable, params = {}, mixin) ->
@identifier = JSON.stringify(params)
extend(this, mixin)
- @cable.subscribers.add(@identifier, this)
+ @cable.subscribers.add(this)
# Perform a channel action with the optional data passed as an attribute
perform: (action, data = {}) ->
@@ -10,10 +10,10 @@ class Cable.Channel
@send(data)
send: (data) ->
- @cable.sendMessage(@identifier, JSON.stringify(data))
+ @cable.send(command: "message", identifier: @identifier, data: JSON.stringify(data))
unsubscribe: ->
- @cable.subscribers.remove(@identifier)
+ @cable.subscribers.remove(this)
extend = (object, properties) ->
if properties?
diff --git a/lib/assets/javascripts/cable/subscriber_manager.js.coffee b/lib/assets/javascripts/cable/subscriber_manager.js.coffee
index 98223d076c..e2e6c9e228 100644
--- a/lib/assets/javascripts/cable/subscriber_manager.js.coffee
+++ b/lib/assets/javascripts/cable/subscriber_manager.js.coffee
@@ -2,25 +2,32 @@ class Cable.SubscriberManager
constructor: (@cable) ->
@subscribers = {}
- add: (identifier, subscriber) ->
+ add: (subscriber) ->
+ {identifier} = subscriber
@subscribers[identifier] = subscriber
- if @cable.sendCommand(identifier, "subscribe")
- @notify(identifier, "connected")
+ if @sendCommand("subscribe", identifier)
+ @notify(subscriber, "connected")
reload: ->
- for identifier in Object.keys(@subscribers)
- if @cable.sendCommand(identifier, "subscribe")
- @notify(identifier, "connected")
+ for identifier, subscriber of @subscribers
+ if @sendCommand("subscribe", identifier)
+ @notify(subscriber, "connected")
- remove: (identifier) ->
- if subscriber = @subscribers[identifier]
- @cable.sendCommand(identifier, "unsubscribe")
- delete @subscribers[identifier]
+ remove: (subscriber) ->
+ {identifier} = subscriber
+ @sendCommand("unsubscribe", identifier)
+ delete @subscribers[identifier]
notifyAll: (event, args...) ->
- for identifier in Object.keys(@subscribers)
- @notify(identifier, event, args...)
+ for identifier, subscriber of @subscribers
+ @notify(subscriber, event, args...)
- notify: (identifier, event, args...) ->
- if subscriber = @subscribers[identifier]
+ notify: (subscriber, event, args...) ->
+ if typeof subscriber is "string"
+ subscriber = @subscribers[subscriber]
+
+ if subscriber
subscriber[event]?(args...)
+
+ sendCommand: (command, identifier) ->
+ @cable.send({command, identifier})