Class: CableReady::Channels

Inherits:
Object
  • Object
show all
Extended by:
Thread::Local
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 Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeChannels

Returns a new instance of Channels.



14
15
16
17
# File 'lib/cable_ready/channels.rb', line 14

def initialize
  @channels = {}
  @operations = {}
end

Instance Attribute Details

#operationsObject

Returns the value of attribute operations.



12
13
14
# File 'lib/cable_ready/channels.rb', line 12

def operations
  @operations
end

Instance Method Details

#[](identifier) ⇒ Object



19
20
21
# File 'lib/cable_ready/channels.rb', line 19

def [](identifier)
  @channels[identifier] ||= CableReady::Channel.new(identifier)
end

#broadcast(*identifiers, clear: true) ⇒ Object



23
24
25
26
27
28
29
30
31
# File 'lib/cable_ready/channels.rb', line 23

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



33
34
35
36
37
38
39
40
41
# File 'lib/cable_ready/channels.rb', line 33

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