diff options
author | Kasper Timm Hansen <kaspth@gmail.com> | 2019-01-24 23:40:33 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-01-24 23:40:33 +0100 |
commit | 36c840057fb46c09457a8b091d2db6351d2efeef (patch) | |
tree | 81550fc640989953b8311d1c94584b36f716c752 /actioncable/lib/action_cable/channel/broadcasting.rb | |
parent | 87626a60426e7b8aa8e4048d7d4b7463ba62bd96 (diff) | |
parent | cfe65cb478a44f19f3b4562cd1cf3c99d2cb930b (diff) | |
download | rails-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.rb | 26 |
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 |