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.
@@ -14,5 +14,5 @@ run ->(env) do
14
14
  end
15
15
  end
16
16
 
17
- [200, { "Content-Type" => "text/html" }, ["Howdy"]]
17
+ [200, { "content-type" => "text/html" }, ["Howdy"]]
18
18
  end
@@ -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 = { "Content-Type" => "application/json; charset=utf-8" }
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["Content-Type"].must_equal "text/plain; charset=utf-8"
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, { 'Content-Type' => 'text/html' }, 'should not be called'] }
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.1
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: 2025-03-20 00:00:00.000000000 Z
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: 1.1.3
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: 1.1.3
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: puma
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.6.0
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.2
378
+ rubygems_version: 3.6.9
358
379
  specification_version: 4
359
380
  summary: ''
360
381
  test_files: []
data/DEV.md DELETED
@@ -1,7 +0,0 @@
1
- ### How to Publish to NPM
2
-
3
- 1. First, edit `package.json` and bump the version.
4
-
5
- 2. Log in to npm `yarn login`
6
-
7
- 3. Publish: `yarn publish`