tiny_bus 3.8.0 → 3.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/tiny_bus.rb +18 -6
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a1da58fd94dfa2c8ad51e0b0031ee4e8372a04f2fd8f9089ef605f2e5827cc85
|
4
|
+
data.tar.gz: 6cc67c07bf48e25acc9ec74da88a0012cc967f150746c6c54aae32ce3ccec309
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 19208ab76103862362cf7eefe6707717521222b4f5ae657ac92606b77647dbb3a308c12dba6ff1fe47184d4ceab3c3d2bf80aaed9fed7eed53b7d06666b51325
|
7
|
+
data.tar.gz: a1e704fc61c63c2bdc9b471b3befd96deb5b0497514e8a38be437c6b2a57529e0c1d3d851b19942604e64592f24ff919aa78b53eac7bfd068e85435dcc8139c0
|
data/lib/tiny_bus.rb
CHANGED
@@ -81,15 +81,22 @@ class TinyBus
|
|
81
81
|
end
|
82
82
|
|
83
83
|
# adds a subscriber to a topic
|
84
|
+
#
|
85
|
+
# - topic: either a String, or an array of String
|
86
|
+
# - subber: an object that responds to #msg that can receive messages
|
84
87
|
def sub(topic, subber)
|
85
88
|
raise TinyBus::SubscriberDoesNotMsg.new("The specified subscriber type `#{subber.class.inspect}' does not respond to #msg") unless subber.respond_to?(:msg)
|
86
89
|
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
90
|
+
topics = topic.is_a?(Array) ? topic : [topic]
|
91
|
+
|
92
|
+
topics.each do |t|
|
93
|
+
@dead_topics.delete(t)
|
94
|
+
@subs[t] ||= Set.new
|
95
|
+
@subs[t] << subber
|
96
|
+
@stats[t] ||= 0
|
91
97
|
|
92
|
-
|
98
|
+
msg({ @topic_key => 'sub', 'to_topic' => t, 'subber' => _to_subber_id(subber) }, 'TINYBUS-SUB')
|
99
|
+
end
|
93
100
|
end
|
94
101
|
|
95
102
|
# removes a subscriber from a topic
|
@@ -127,7 +134,12 @@ class TinyBus
|
|
127
134
|
@stats[@total_key] += 1
|
128
135
|
@stats[topic] += 1
|
129
136
|
if (subbers&.length || 0) > 0
|
130
|
-
|
137
|
+
# cloning is necessary, because sending messanges may result in new
|
138
|
+
# subscribers to the same topic we're iterating over right now. in that
|
139
|
+
# situation we would run into a RuntimeError that prevented the
|
140
|
+
# modification of the Set we're iterating over to send messages.
|
141
|
+
subbers.clone.each{|s| s.msg(msg) }
|
142
|
+
|
131
143
|
@log.send(lvl, "S #{msg}")
|
132
144
|
else
|
133
145
|
if @raise_on_dead
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tiny_bus
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
4
|
+
version: 3.9.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jeff Lunt
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-07-
|
11
|
+
date: 2023-07-29 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: tiny_log
|