Class: CableReady::Channels

Inherits:
Object
  • Object
show all
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

Methods included from Compoundable

#compound

Constructor Details

#initializeChannels

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