message_bus 4.4.1 → 4.5.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/.github/workflows/ci.yml +35 -12
- data/.gitignore +1 -2
- data/CHANGELOG +20 -0
- data/README.md +5 -3
- data/Rakefile +2 -2
- data/docker-compose.yml +1 -1
- data/examples/bench/config.ru +1 -1
- data/examples/chat/Gemfile +1 -1
- data/examples/chat/docker_container/chat.yml +3 -3
- data/examples/minimal/config.ru +1 -1
- data/gemfiles/rack2.gemfile +5 -0
- data/gemfiles/rack3.gemfile +5 -0
- data/lib/message_bus/client.rb +7 -7
- data/lib/message_bus/connection_manager.rb +7 -2
- data/lib/message_bus/rack/middleware.rb +9 -9
- data/lib/message_bus/version.rb +1 -1
- data/message_bus.gemspec +5 -6
- data/package.json +8 -1
- data/pnpm-lock.yaml +1526 -0
- data/spec/fixtures/test/config.ru +1 -1
- data/spec/integration/http_client_spec.rb +1 -1
- data/spec/lib/message_bus/client_spec.rb +4 -2
- data/spec/lib/message_bus/connection_manager_spec.rb +23 -0
- data/spec/lib/message_bus/rack/middleware_spec.rb +1 -1
- metadata +32 -11
- data/DEV.md +0 -7
- data/package-lock.json +0 -3781
|
@@ -65,7 +65,7 @@ describe MessageBus::HTTPClient do
|
|
|
65
65
|
# that we sleep for the right interval after failure
|
|
66
66
|
sleep 0.5
|
|
67
67
|
|
|
68
|
-
assert_match(/Errno::ECONNREFUSED|SocketError/, fake.string)
|
|
68
|
+
assert_match(/Errno::ECONNREFUSED|SocketError|Socket::ResolutionError/, fake.string)
|
|
69
69
|
ensure
|
|
70
70
|
$stderr = original_stderr
|
|
71
71
|
end
|
|
@@ -32,6 +32,8 @@ describe MessageBus::Client do
|
|
|
32
32
|
break if line == ""
|
|
33
33
|
|
|
34
34
|
name, val = line.split(": ")
|
|
35
|
+
name = name.downcase
|
|
36
|
+
raise "duplicate header: #{name}" if headers.key?(name)
|
|
35
37
|
headers[name] = val
|
|
36
38
|
end
|
|
37
39
|
|
|
@@ -59,7 +61,7 @@ describe MessageBus::Client do
|
|
|
59
61
|
@client.use_chunked = true
|
|
60
62
|
r, w = IO.pipe
|
|
61
63
|
@client.io = w
|
|
62
|
-
@client.headers = { "
|
|
64
|
+
@client.headers = { "content-type" => "application/json; charset=utf-8" }
|
|
63
65
|
@client << MessageBus::Message.new(1, 1, '/test', 'test')
|
|
64
66
|
@client << MessageBus::Message.new(2, 2, '/test', "a|\r\n|\r\n|b")
|
|
65
67
|
|
|
@@ -67,7 +69,7 @@ describe MessageBus::Client do
|
|
|
67
69
|
|
|
68
70
|
status, headers, chunks = http_parse(lines)
|
|
69
71
|
|
|
70
|
-
headers["
|
|
72
|
+
headers["content-type"].must_equal "text/plain; charset=utf-8"
|
|
71
73
|
status.must_equal "200"
|
|
72
74
|
chunks.length.must_equal 2
|
|
73
75
|
|
|
@@ -90,6 +90,29 @@ describe MessageBus::ConnectionManager do
|
|
|
90
90
|
@manager.notify_clients(m)
|
|
91
91
|
assert_nil @resp.sent
|
|
92
92
|
end
|
|
93
|
+
|
|
94
|
+
it "should prune empty channel and site_id entries from subscriptions after removing clients" do
|
|
95
|
+
client1 = MessageBus::Client.new(client_id: "abc", user_id: 1, site_id: 20)
|
|
96
|
+
client1.subscribe('test', -1)
|
|
97
|
+
@manager.add_client(client1)
|
|
98
|
+
|
|
99
|
+
client2 = MessageBus::Client.new(client_id: "def", user_id: 2, site_id: 20)
|
|
100
|
+
client2.subscribe('test', -1)
|
|
101
|
+
@manager.add_client(client2)
|
|
102
|
+
|
|
103
|
+
@manager.remove_client(client1)
|
|
104
|
+
|
|
105
|
+
subscriptions = @manager.instance_variable_get(:@subscriptions)
|
|
106
|
+
assert subscriptions[client1.site_id].key?('test')
|
|
107
|
+
assert subscriptions[client1.site_id]['test'].include?(client2.client_id)
|
|
108
|
+
refute subscriptions[client1.site_id]['test'].include?(client1.client_id)
|
|
109
|
+
|
|
110
|
+
@manager.remove_client(client2)
|
|
111
|
+
|
|
112
|
+
subscriptions = @manager.instance_variable_get(:@subscriptions)
|
|
113
|
+
assert_nil subscriptions.dig(client1.site_id, 'test')
|
|
114
|
+
assert_nil subscriptions[client1.site_id]
|
|
115
|
+
end
|
|
93
116
|
end
|
|
94
117
|
|
|
95
118
|
describe MessageBus::ConnectionManager, "notifying and subscribing concurrently" do
|
|
@@ -21,7 +21,7 @@ describe MessageBus::Rack::Middleware do
|
|
|
21
21
|
use FakeAsyncMiddleware, message_bus: bus
|
|
22
22
|
use e_m if e_m
|
|
23
23
|
use MessageBus::Rack::Middleware, message_bus: bus
|
|
24
|
-
run lambda { |_env| [500, { '
|
|
24
|
+
run lambda { |_env| [500, { 'content-type' => 'text/html' }, 'should not be called'] }
|
|
25
25
|
}
|
|
26
26
|
|
|
27
27
|
@async_middleware = builder.to_app
|
metadata
CHANGED
|
@@ -1,28 +1,34 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: message_bus
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 4.
|
|
4
|
+
version: 4.5.2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Sam Saffron
|
|
8
8
|
bindir: bin
|
|
9
9
|
cert_chain: []
|
|
10
|
-
date:
|
|
10
|
+
date: 1980-01-02 00:00:00.000000000 Z
|
|
11
11
|
dependencies:
|
|
12
12
|
- !ruby/object:Gem::Dependency
|
|
13
13
|
name: rack
|
|
14
14
|
requirement: !ruby/object:Gem::Requirement
|
|
15
15
|
requirements:
|
|
16
|
-
- - "
|
|
16
|
+
- - ">"
|
|
17
|
+
- !ruby/object:Gem::Version
|
|
18
|
+
version: '2'
|
|
19
|
+
- - "<"
|
|
17
20
|
- !ruby/object:Gem::Version
|
|
18
|
-
version:
|
|
21
|
+
version: '4'
|
|
19
22
|
type: :runtime
|
|
20
23
|
prerelease: false
|
|
21
24
|
version_requirements: !ruby/object:Gem::Requirement
|
|
22
25
|
requirements:
|
|
23
|
-
- - "
|
|
26
|
+
- - ">"
|
|
24
27
|
- !ruby/object:Gem::Version
|
|
25
|
-
version:
|
|
28
|
+
version: '2'
|
|
29
|
+
- - "<"
|
|
30
|
+
- !ruby/object:Gem::Version
|
|
31
|
+
version: '4'
|
|
26
32
|
- !ruby/object:Gem::Dependency
|
|
27
33
|
name: redis
|
|
28
34
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -164,7 +170,7 @@ dependencies:
|
|
|
164
170
|
- !ruby/object:Gem::Version
|
|
165
171
|
version: '0'
|
|
166
172
|
- !ruby/object:Gem::Dependency
|
|
167
|
-
name:
|
|
173
|
+
name: pitchfork
|
|
168
174
|
requirement: !ruby/object:Gem::Requirement
|
|
169
175
|
requirements:
|
|
170
176
|
- - ">="
|
|
@@ -205,6 +211,20 @@ dependencies:
|
|
|
205
211
|
- - ">="
|
|
206
212
|
- !ruby/object:Gem::Version
|
|
207
213
|
version: '0'
|
|
214
|
+
- !ruby/object:Gem::Dependency
|
|
215
|
+
name: method_source
|
|
216
|
+
requirement: !ruby/object:Gem::Requirement
|
|
217
|
+
requirements:
|
|
218
|
+
- - ">="
|
|
219
|
+
- !ruby/object:Gem::Version
|
|
220
|
+
version: '0'
|
|
221
|
+
type: :development
|
|
222
|
+
prerelease: false
|
|
223
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
224
|
+
requirements:
|
|
225
|
+
- - ">="
|
|
226
|
+
- !ruby/object:Gem::Version
|
|
227
|
+
version: '0'
|
|
208
228
|
- !ruby/object:Gem::Dependency
|
|
209
229
|
name: oj
|
|
210
230
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -260,7 +280,6 @@ files:
|
|
|
260
280
|
- ".prettierrc"
|
|
261
281
|
- ".rubocop.yml"
|
|
262
282
|
- CHANGELOG
|
|
263
|
-
- DEV.md
|
|
264
283
|
- Dockerfile
|
|
265
284
|
- Gemfile
|
|
266
285
|
- Guardfile
|
|
@@ -289,6 +308,8 @@ files:
|
|
|
289
308
|
- examples/chat/docker_container/update_chat
|
|
290
309
|
- examples/minimal/Gemfile
|
|
291
310
|
- examples/minimal/config.ru
|
|
311
|
+
- gemfiles/rack2.gemfile
|
|
312
|
+
- gemfiles/rack3.gemfile
|
|
292
313
|
- lib/message_bus.rb
|
|
293
314
|
- lib/message_bus/backends.rb
|
|
294
315
|
- lib/message_bus/backends/base.rb
|
|
@@ -311,8 +332,8 @@ files:
|
|
|
311
332
|
- lib/message_bus/timer_thread.rb
|
|
312
333
|
- lib/message_bus/version.rb
|
|
313
334
|
- message_bus.gemspec
|
|
314
|
-
- package-lock.json
|
|
315
335
|
- package.json
|
|
336
|
+
- pnpm-lock.yaml
|
|
316
337
|
- spec/assets/SpecHelper.js
|
|
317
338
|
- spec/assets/message-bus.spec.js
|
|
318
339
|
- spec/fixtures/test/Gemfile
|
|
@@ -347,14 +368,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
347
368
|
requirements:
|
|
348
369
|
- - ">="
|
|
349
370
|
- !ruby/object:Gem::Version
|
|
350
|
-
version: 2.
|
|
371
|
+
version: 3.2.0
|
|
351
372
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
352
373
|
requirements:
|
|
353
374
|
- - ">="
|
|
354
375
|
- !ruby/object:Gem::Version
|
|
355
376
|
version: '0'
|
|
356
377
|
requirements: []
|
|
357
|
-
rubygems_version: 3.6.
|
|
378
|
+
rubygems_version: 3.6.9
|
|
358
379
|
specification_version: 4
|
|
359
380
|
summary: ''
|
|
360
381
|
test_files: []
|