aboutsummaryrefslogtreecommitdiffstats
path: root/lib/assets
diff options
context:
space:
mode:
authorDavid Heinemeier Hansson <david@loudthinking.com>2015-07-08 11:00:24 +0200
committerDavid Heinemeier Hansson <david@loudthinking.com>2015-07-08 11:00:24 +0200
commit7c6a7f28eb882a7e4eca75fc87c42dd5d9e78d8f (patch)
treeb9d3fe372812bcd2ddcda3c4cd9cf10bdfd511c5 /lib/assets
parent212ba994b3ad1a065538ff67f3af6421ec77f93c (diff)
downloadrails-7c6a7f28eb882a7e4eca75fc87c42dd5d9e78d8f.tar.gz
rails-7c6a7f28eb882a7e4eca75fc87c42dd5d9e78d8f.tar.bz2
rails-7c6a7f28eb882a7e4eca75fc87c42dd5d9e78d8f.zip
Rename SubscriptionManager/Subscriber -> Subscriptions
This matches the server-side setup and is more consistent.
Diffstat (limited to 'lib/assets')
-rw-r--r--lib/assets/javascripts/cable/connection.js.coffee8
-rw-r--r--lib/assets/javascripts/cable/connection_monitor.js.coffee2
-rw-r--r--lib/assets/javascripts/cable/consumer.js.coffee18
-rw-r--r--lib/assets/javascripts/cable/subscriber_manager.js.coffee41
-rw-r--r--lib/assets/javascripts/cable/subscription.js.coffee4
-rw-r--r--lib/assets/javascripts/cable/subscriptions.js.coffee41
6 files changed, 63 insertions, 51 deletions
diff --git a/lib/assets/javascripts/cable/connection.js.coffee b/lib/assets/javascripts/cable/connection.js.coffee
index 2e7a9930ec..87fd038a6f 100644
--- a/lib/assets/javascripts/cable/connection.js.coffee
+++ b/lib/assets/javascripts/cable/connection.js.coffee
@@ -60,16 +60,16 @@ class Cable.Connection
events:
message: (event) ->
{identifier, message} = JSON.parse(event.data)
- @consumer.subscribers.notify(identifier, "received", message)
+ @consumer.subscriptions.notify(identifier, "received", message)
open: ->
- @consumer.subscribers.reload()
+ @consumer.subscriptions.reload()
close: ->
- @consumer.subscribers.notifyAll("disconnected")
+ @consumer.subscriptions.notifyAll("disconnected")
error: ->
- @consumer.subscribers.notifyAll("disconnected")
+ @consumer.subscriptions.notifyAll("disconnected")
@closeSilently()
toJSON: ->
diff --git a/lib/assets/javascripts/cable/connection_monitor.js.coffee b/lib/assets/javascripts/cable/connection_monitor.js.coffee
index ea0c360b75..1f8ce4eb20 100644
--- a/lib/assets/javascripts/cable/connection_monitor.js.coffee
+++ b/lib/assets/javascripts/cable/connection_monitor.js.coffee
@@ -10,7 +10,7 @@ class Cable.ConnectionMonitor
pingedAt: 8
constructor: (@consumer) ->
- @consumer.subscribers.add(this)
+ @consumer.subscriptions.add(this)
@start()
connected: ->
diff --git a/lib/assets/javascripts/cable/consumer.js.coffee b/lib/assets/javascripts/cable/consumer.js.coffee
index 27314ee508..b01ae586aa 100644
--- a/lib/assets/javascripts/cable/consumer.js.coffee
+++ b/lib/assets/javascripts/cable/consumer.js.coffee
@@ -1,11 +1,23 @@
#= require cable/connection
#= require cable/connection_monitor
+#= require cable/subscriptions
#= require cable/subscription
-#= require cable/subscriber_manager
+# The Cable.Consumer establishes the connection to a server-side Ruby Connection object. Once established,
+# the Cable.ConnectionMonitor will ensure that its properly maintained through heartbeats and checking for stale updates.
+# The Consumer instance is also the gateway to establishing subscriptions to desired channels through the #createSubscription
+# method.
+#
+# The following example shows how this can be setup:
+#
+# @App = {}
+# App.cable = Cable.createConsumer "http://example.com/accounts/1"
+# App.appearance = App.cable.createSubscription "AppearanceChannel"
+#
+# For more details on how you'd configure an actual channel subscription, see Cable.Subscription.
class Cable.Consumer
constructor: (@url) ->
- @subscribers = new Cable.SubscriberManager this
+ @subscriptions = new Cable.Subscriptions this
@connection = new Cable.Connection this
@connectionMonitor = new Cable.ConnectionMonitor this
@@ -21,4 +33,4 @@ class Cable.Consumer
JSON.stringify(this, null, 2)
toJSON: ->
- {@url, @subscribers, @connection, @connectionMonitor}
+ {@url, @subscriptions, @connection, @connectionMonitor}
diff --git a/lib/assets/javascripts/cable/subscriber_manager.js.coffee b/lib/assets/javascripts/cable/subscriber_manager.js.coffee
deleted file mode 100644
index 1eef98ff0b..0000000000
--- a/lib/assets/javascripts/cable/subscriber_manager.js.coffee
+++ /dev/null
@@ -1,41 +0,0 @@
-class Cable.SubscriberManager
- constructor: (@consumer) ->
- @subscribers = []
-
- add: (subscriber) ->
- @subscribers.push(subscriber)
- @notify(subscriber, "initialized")
- if @sendCommand(subscriber, "subscribe")
- @notify(subscriber, "connected")
-
- reload: ->
- for subscriber in @subscribers
- if @sendCommand(subscriber, "subscribe")
- @notify(subscriber, "connected")
-
- remove: (subscriber) ->
- @sendCommand(subscriber, "unsubscribe")
- @subscribers = (s for s in @subscribers when s isnt subscriber)
-
- notifyAll: (callbackName, args...) ->
- for subscriber in @subscribers
- @notify(subscriber, callbackName, args...)
-
- notify: (subscriber, callbackName, args...) ->
- if typeof subscriber is "string"
- subscribers = (s for s in @subscribers when s.identifier is subscriber)
- else
- subscribers = [subscriber]
-
- for subscriber in subscribers
- subscriber[callbackName]?(args...)
-
- sendCommand: (subscriber, command) ->
- {identifier} = subscriber
- if identifier is Cable.PING_IDENTIFIER
- @consumer.connection.isOpen()
- else
- @consumer.send({command, identifier})
-
- toJSON: ->
- subscriber.identifier for subscriber in @subscribers
diff --git a/lib/assets/javascripts/cable/subscription.js.coffee b/lib/assets/javascripts/cable/subscription.js.coffee
index 74cc35a7a7..17f5a10868 100644
--- a/lib/assets/javascripts/cable/subscription.js.coffee
+++ b/lib/assets/javascripts/cable/subscription.js.coffee
@@ -2,7 +2,7 @@ class Cable.Subscription
constructor: (@consumer, params = {}, mixin) ->
@identifier = JSON.stringify(params)
extend(this, mixin)
- @consumer.subscribers.add(this)
+ @consumer.subscriptions.add(this)
# Perform a channel action with the optional data passed as an attribute
perform: (action, data = {}) ->
@@ -13,7 +13,7 @@ class Cable.Subscription
@consumer.send(command: "message", identifier: @identifier, data: JSON.stringify(data))
unsubscribe: ->
- @consumer.subscribers.remove(this)
+ @consumer.subscriptions.remove(this)
extend = (object, properties) ->
if properties?
diff --git a/lib/assets/javascripts/cable/subscriptions.js.coffee b/lib/assets/javascripts/cable/subscriptions.js.coffee
new file mode 100644
index 0000000000..7cb008ca67
--- /dev/null
+++ b/lib/assets/javascripts/cable/subscriptions.js.coffee
@@ -0,0 +1,41 @@
+class Cable.Subscriptions
+ constructor: (@consumer) ->
+ @subscriptions = []
+
+ add: (subscription) ->
+ @subscriptions.push(subscription)
+ @notify(subscription, "initialized")
+ if @sendCommand(subscription, "subscribe")
+ @notify(subscription, "connected")
+
+ reload: ->
+ for subscription in @subscriptions
+ if @sendCommand(subscription, "subscribe")
+ @notify(subscription, "connected")
+
+ remove: (subscription) ->
+ @sendCommand(subscription, "unsubscribe")
+ @subscriptions = (s for s in @subscriptions when s isnt subscription)
+
+ notifyAll: (callbackName, args...) ->
+ for subscription in @subscriptions
+ @notify(subscription, callbackName, args...)
+
+ notify: (subscription, callbackName, args...) ->
+ if typeof subscription is "string"
+ subscriptions = (s for s in @subscriptions when s.identifier is subscription)
+ else
+ subscriptions = [subscription]
+
+ for subscription in subscriptions
+ subscription[callbackName]?(args...)
+
+ sendCommand: (subscription, command) ->
+ {identifier} = subscription
+ if identifier is Cable.PING_IDENTIFIER
+ @consumer.connection.isOpen()
+ else
+ @consumer.send({command, identifier})
+
+ toJSON: ->
+ subscription.identifier for subscription in @subscriptions