Class: CableReady::Channels
- Inherits:
-
Object
- Object
- CableReady::Channels
- 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
-
#operations ⇒ Object
Returns the value of attribute operations.
Instance Method Summary collapse
- #[](identifier) ⇒ Object
- #broadcast(*identifiers, clear: true) ⇒ Object
- #broadcast_to(model, *identifiers, clear: true) ⇒ Object
-
#initialize ⇒ Channels
constructor
A new instance of Channels.
Constructor Details
#initialize ⇒ Channels
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
#operations ⇒ Object
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 |