local_bus 0.1.0 → 0.1.2
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/README.md +55 -1
- data/lib/local_bus/bus.rb +1 -0
- data/lib/local_bus/station.rb +4 -3
- data/lib/local_bus/subscriber.rb +4 -1
- data/lib/local_bus/version.rb +1 -1
- 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: 3abe4359b671f5e051a9e3b4e2cb0ac73ca9c00ef63c1622c158ebf4c116a1b5
|
4
|
+
data.tar.gz: 408ea743c2b5b8d3a000a8db5b8207f6e3d90edfb3976b8bf1aad3ec11dde8ab
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: de71a197041a072f69ad37e971663983da3f77a00889c71afc622d382e74480bf5bef25ebfdc5d97762d4a15f385b0d63bdd929f67c6e455dc378340d3afda93
|
7
|
+
data.tar.gz: fe165204058f9e5f9df6aa00d4f3d07db69478eeca3232a7204be758e0b6418800e903c576c927b04b0a958946e729c385a27341bb1f9168bcb2cb83198396db
|
data/README.md
CHANGED
@@ -87,7 +87,7 @@ Both interfaces ensure optimal performance:
|
|
87
87
|
Best for real-time operations like logging, metrics, and state updates.
|
88
88
|
|
89
89
|
```ruby
|
90
|
-
bus = LocalBus.instance.bus
|
90
|
+
bus = LocalBus::Bus.new # ... or LocalBus.instance.bus
|
91
91
|
|
92
92
|
bus.subscribe "user.created" do |message|
|
93
93
|
AuditLog.record(message.payload)
|
@@ -101,6 +101,33 @@ result.wait # blocks until all subscribers complete
|
|
101
101
|
result.value # blocks and waits until all subscribers complete and returns the subscribers
|
102
102
|
```
|
103
103
|
|
104
|
+
Subscribe with an explicit `callable`.
|
105
|
+
|
106
|
+
```ruby
|
107
|
+
callable = ->(message) { "Received message: #{message.payload}" }
|
108
|
+
LocalBus.instance.bus.subscribe "user.created", callable: callable
|
109
|
+
|
110
|
+
subscribers = LocalBus.instance.bus.publish("user.created", user_id: 123).value
|
111
|
+
# => [#<LocalBus::Subscriber:0x0000000126b7cf38 ...>]
|
112
|
+
|
113
|
+
subscribers.first.value
|
114
|
+
# => "Received message: {:user_id=>123}"
|
115
|
+
|
116
|
+
# you can use any object that responds to #call
|
117
|
+
class ExampleCallable
|
118
|
+
def call(message)
|
119
|
+
"Received message: #{message.payload}"
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
LocalBus.instance.bus.subscribe "user.created", callable: ExampleCallable.new
|
124
|
+
subscribers = LocalBus.instance.bus.publish("user.created", user_id: 123).value
|
125
|
+
# => [#<LocalBus::Subscriber:0x0000000126b7cf38 ...>]
|
126
|
+
|
127
|
+
subscribers.first.value
|
128
|
+
# => "Received message: {:user_id=>123}"
|
129
|
+
```
|
130
|
+
|
104
131
|
### Station (background processing)
|
105
132
|
|
106
133
|
Best for async operations like emails, notifications, and resource-intensive tasks.
|
@@ -120,6 +147,33 @@ result.wait # blocks until all subscribers complete
|
|
120
147
|
result.value # blocks and waits until all subscribers complete and returns the subscribers
|
121
148
|
```
|
122
149
|
|
150
|
+
Subscribe with an explicit `callable`.
|
151
|
+
|
152
|
+
```ruby
|
153
|
+
callable = ->(message) { "Received message: #{message.payload}" }
|
154
|
+
LocalBus.instance.station.subscribe "email.welcome", callable: callable
|
155
|
+
|
156
|
+
subscribers = LocalBus.instance.station.publish("email.welcome", user_id: 123).value
|
157
|
+
# => [#<LocalBus::Subscriber:0x0000000126b7cf38 ...>]
|
158
|
+
|
159
|
+
subscribers.first.value
|
160
|
+
# => "Received message: {:user_id=>123}"
|
161
|
+
|
162
|
+
# you can use any object that responds to #call
|
163
|
+
class ExampleCallable
|
164
|
+
def call(message)
|
165
|
+
"Received message: #{message.payload}"
|
166
|
+
end
|
167
|
+
end
|
168
|
+
|
169
|
+
LocalBus.instance.station.subscribe "email.welcome", callable: ExampleCallable.new
|
170
|
+
subscribers = LocalBus.instance.station.publish("email.welcome", user_id: 123).value
|
171
|
+
# => [#<LocalBus::Subscriber:0x0000000126b7cf38 ...>]
|
172
|
+
|
173
|
+
subscribers.first.value
|
174
|
+
# => "Received message: {:user_id=>123}"
|
175
|
+
```
|
176
|
+
|
123
177
|
## Advanced Usage & Considerations
|
124
178
|
|
125
179
|
### Concurrency Controls
|
data/lib/local_bus/bus.rb
CHANGED
data/lib/local_bus/station.rb
CHANGED
@@ -99,6 +99,8 @@ class LocalBus
|
|
99
99
|
|
100
100
|
@pool = nil
|
101
101
|
end
|
102
|
+
rescue
|
103
|
+
nil # ignore errors during shutdown
|
102
104
|
end
|
103
105
|
|
104
106
|
# Clean up shutdown handler
|
@@ -124,8 +126,7 @@ class LocalBus
|
|
124
126
|
# @rbs &block: (Message) -> untyped -- alternative way to provide a callable
|
125
127
|
# @rbs return: self
|
126
128
|
def subscribe(topic, callable: nil, &block)
|
127
|
-
callable
|
128
|
-
bus.subscribe(topic, &callable)
|
129
|
+
bus.subscribe(topic, callable: callable || block)
|
129
130
|
self
|
130
131
|
end
|
131
132
|
|
@@ -214,9 +215,9 @@ class LocalBus
|
|
214
215
|
# @rbs on: Array[String] -- signals to trap
|
215
216
|
# @rbs return: void
|
216
217
|
def enable_safe_shutdown(on:)
|
218
|
+
at_exit { stop }
|
217
219
|
on.each do |signal|
|
218
220
|
trap signal do
|
219
|
-
# Only queue the signal if we haven't started shutdown
|
220
221
|
@shutdown_queue.push signal unless @shutdown.true?
|
221
222
|
rescue
|
222
223
|
nil
|
data/lib/local_bus/subscriber.rb
CHANGED
@@ -27,7 +27,10 @@ class LocalBus
|
|
27
27
|
@callable = callable
|
28
28
|
@message = message
|
29
29
|
@id = callable.object_id
|
30
|
-
@source_location = callable
|
30
|
+
@source_location = case callable
|
31
|
+
in Proc then callable.source_location
|
32
|
+
else callable.method(:call).source_location
|
33
|
+
end
|
31
34
|
@metadata = {}
|
32
35
|
end
|
33
36
|
|
data/lib/local_bus/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: local_bus
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nate Hopkins (hopsoft)
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-11-
|
11
|
+
date: 2024-11-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: async
|