aboutsummaryrefslogtreecommitdiffstats
path: root/actioncable/lib/action_cable/channel/broadcasting.rb
diff options
context:
space:
mode:
authorKasper Timm Hansen <kaspth@gmail.com>2019-01-24 23:40:33 +0100
committerGitHub <noreply@github.com>2019-01-24 23:40:33 +0100
commit36c840057fb46c09457a8b091d2db6351d2efeef (patch)
tree81550fc640989953b8311d1c94584b36f716c752 /actioncable/lib/action_cable/channel/broadcasting.rb
parent87626a60426e7b8aa8e4048d7d4b7463ba62bd96 (diff)
parentcfe65cb478a44f19f3b4562cd1cf3c99d2cb930b (diff)
downloadrails-36c840057fb46c09457a8b091d2db6351d2efeef.tar.gz
rails-36c840057fb46c09457a8b091d2db6351d2efeef.tar.bz2
rails-36c840057fb46c09457a8b091d2db6351d2efeef.zip
Merge pull request #35021 from palkan/refactor/broadcasting-for-testing
Action Cable: move channel_name to Channel.broadcasting_for
Diffstat (limited to 'actioncable/lib/action_cable/channel/broadcasting.rb')
-rw-r--r--actioncable/lib/action_cable/channel/broadcasting.rb26
1 files changed, 18 insertions, 8 deletions
diff --git a/actioncable/lib/action_cable/channel/broadcasting.rb b/actioncable/lib/action_cable/channel/broadcasting.rb
index 9a96720f4a..9f702e425e 100644
--- a/actioncable/lib/action_cable/channel/broadcasting.rb
+++ b/actioncable/lib/action_cable/channel/broadcasting.rb
@@ -7,22 +7,32 @@ module ActionCable
module Broadcasting
extend ActiveSupport::Concern
- delegate :broadcasting_for, to: :class
+ delegate :broadcasting_for, :broadcast_to, to: :class
module ClassMethods
# Broadcast a hash to a unique broadcasting for this <tt>model</tt> in this channel.
def broadcast_to(model, message)
- ActionCable.server.broadcast(broadcasting_for([ channel_name, model ]), message)
+ ActionCable.server.broadcast(broadcasting_for(model), message)
end
- def broadcasting_for(model) #:nodoc:
+ # Returns a unique broadcasting identifier for this <tt>model</tt> in this channel:
+ #
+ # CommentsChannel.broadcasting_for("all") # => "comments:all"
+ #
+ # You can pass any object as a target (e.g. Active Record model), and it
+ # would be serialized into a string under the hood.
+ def broadcasting_for(model)
+ serialize_broadcasting([ channel_name, model ])
+ end
+
+ def serialize_broadcasting(object) #:nodoc:
case
- when model.is_a?(Array)
- model.map { |m| broadcasting_for(m) }.join(":")
- when model.respond_to?(:to_gid_param)
- model.to_gid_param
+ when object.is_a?(Array)
+ object.map { |m| serialize_broadcasting(m) }.join(":")
+ when object.respond_to?(:to_gid_param)
+ object.to_gid_param
else
- model.to_param
+ object.to_param
end
end
end