Class: CableReady::Channels
- Inherits:
-
Object
- Object
- CableReady::Channels
- Extended by:
- Thread::Local
- Includes:
- Compoundable
- Defined in:
- lib/cable_ready/channels.rb
Overview
This class is a thread local singleton: CableReady::Channels.instance SEE: github.com/socketry/thread-local/tree/master/guides/getting-started
Instance Method Summary collapse
- #[](*keys) ⇒ Object
- #broadcast(*identifiers, clear: true) ⇒ Object
- #broadcast_to(model, *identifiers, clear: true) ⇒ Object
-
#initialize ⇒ Channels
constructor
A new instance of Channels.
Methods included from Compoundable
Constructor Details
#initialize ⇒ Channels
Returns a new instance of Channels.
14 15 16 |
# File 'lib/cable_ready/channels.rb', line 14 def initialize @channels = {} end |
Instance Method Details
#[](*keys) ⇒ Object
18 19 20 21 22 |
# File 'lib/cable_ready/channels.rb', line 18 def [](*keys) keys.select!(&:itself) identifier = (keys.many? || (keys.one? && keys.first.respond_to?(:to_global_id))) ? compound(keys) : keys.pop @channels[identifier] ||= CableReady::Channel.new(identifier) end |
#broadcast(*identifiers, clear: true) ⇒ Object
24 25 26 27 28 29 30 31 32 |
# File 'lib/cable_ready/channels.rb', line 24 def broadcast(*identifiers, clear: true) @channels.values .reject { |channel| identifiers.any? && identifiers.exclude?(channel.identifier) } .select { |channel| channel.identifier.is_a?(String) } .tap do |channels| channels.each { |channel| @channels[channel.identifier].broadcast(clear: clear) } channels.each { |channel| @channels.except!(channel.identifier) if clear } end end |
#broadcast_to(model, *identifiers, clear: true) ⇒ Object
34 35 36 37 38 39 40 41 42 |
# File 'lib/cable_ready/channels.rb', line 34 def broadcast_to(model, *identifiers, clear: true) @channels.values .reject { |channel| identifiers.any? && identifiers.exclude?(channel.identifier) } .reject { |channel| channel.identifier.is_a?(String) } .tap do |channels| channels.each { |channel| @channels[channel.identifier].broadcast_to(model, clear: clear) } channels.each { |channel| @channels.except!(channel.identifier) if clear } end end |