message_bus 4.5.0 → 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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c0191a3cefe09aba3cbad0048cb6dd56ed1e9d05159ac66f26429715f3e785d6
4
- data.tar.gz: bcdcb1b72f53eb15c220ca4909de5ceadb251678a174d16f3e277934bf72802d
3
+ metadata.gz: e0f8dcac413e4d7ebfd5518440b1bae9311dfee8395d13b9c9a137aed8048689
4
+ data.tar.gz: dd16dc24af70834d8d62ecbc5f570e7790e00c78f876eee3c3b35483e7e576ab
5
5
  SHA512:
6
- metadata.gz: 47ee3632a6eca276a1eacb3ddde8f5e56b36d11d30ea8414756338e6a0baec6f6d609cc7a1bc2c9d86561d6d9f1c2347a2e1f912cf3a519fb1c842b9e83aab06
7
- data.tar.gz: da53d5bb3626d27f9b8236c31064496f085c09486149d584b17aee86ac7ed58d1809c9b8c4f7151fe986b9d83dd89d26761cc878b2e6feb27de3d6b4c1de7530
6
+ metadata.gz: a48f71540d916776ee00ea49d651b1e5463ce15c1f4c97b7188550896908a6d67cb90d0e165ea6a607b8e5ef6909f3aa53aa0b06772233b80f1656c79f750f18
7
+ data.tar.gz: a32fb12a213171d4c1bc40c2d55e34f8572bb97ed44b9fccbcf23c0f7844114039175f4ba122ea9d240280e21e57c3edc7da85d82c69012ef98c8575a0b7c457
@@ -38,10 +38,11 @@ jobs:
38
38
 
39
39
  test:
40
40
  runs-on: ubuntu-latest
41
- name: Ruby ${{ matrix.ruby }} (${{ matrix.redis }})
41
+ name: Ruby ${{ matrix.ruby }} (${{ matrix.redis }}, ${{ matrix.rack }})
42
42
  timeout-minutes: 10
43
43
 
44
44
  env:
45
+ BUNDLE_GEMFILE: gemfiles/${{ matrix.rack }}.gemfile
45
46
  PGHOST: localhost
46
47
  PGPASSWORD: postgres
47
48
  PGUSER: postgres
@@ -50,7 +51,8 @@ jobs:
50
51
  fail-fast: false
51
52
  matrix:
52
53
  ruby: ["3.2", "3.3", "3.4"]
53
- redis: ["redis:5", "redis:6", "valkey/valkey"]
54
+ rack: ["rack2", "rack3"]
55
+ redis: ["redis:7.4", "valkey/valkey"]
54
56
 
55
57
  services:
56
58
  postgres:
data/.gitignore CHANGED
@@ -4,6 +4,7 @@
4
4
  .config
5
5
  .yardoc
6
6
  Gemfile.lock
7
+ gemfiles/*.gemfile.lock
7
8
  InstalledFiles
8
9
  _yardoc
9
10
  coverage
data/CHANGELOG CHANGED
@@ -1,3 +1,16 @@
1
+ 13-02-2026
2
+
3
+ - Version 4.5.2
4
+
5
+ - FIX: Use consistent casing for headers
6
+ - DEV: Test against both Rack 2 and Rack 3 in CI
7
+
8
+ 10-02-2026
9
+
10
+ - Version 4.5.1
11
+
12
+ - DEV: Allow 2.x rack dependency
13
+
1
14
  10-02-2026
2
15
 
3
16
  - Version 4.5.0
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ eval_gemfile "../Gemfile"
4
+
5
+ gem "rack", "~> 2.0"
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ eval_gemfile "../Gemfile"
4
+
5
+ gem "rack", "~> 3.0"
@@ -228,18 +228,18 @@ class MessageBus::Client
228
228
  NEWLINE = "\r\n".freeze
229
229
  COLON_SPACE = ": ".freeze
230
230
  HTTP_11 = "HTTP/1.1 200 OK\r\n".freeze
231
- CONTENT_LENGTH = "Content-Length: ".freeze
232
- CONNECTION_CLOSE = "Connection: close\r\n".freeze
233
- CHUNKED_ENCODING = "Transfer-Encoding: chunked\r\n".freeze
234
- NO_SNIFF = "X-Content-Type-Options: nosniff\r\n".freeze
231
+ CONTENT_LENGTH = "content-length: ".freeze
232
+ CONNECTION_CLOSE = "connection: close\r\n".freeze
233
+ CHUNKED_ENCODING = "transfer-encoding: chunked\r\n".freeze
234
+ NO_SNIFF = "x-content-type-options: nosniff\r\n".freeze
235
235
 
236
- TYPE_TEXT = "Content-Type: text/plain; charset=utf-8\r\n".freeze
237
- TYPE_JSON = "Content-Type: application/json; charset=utf-8\r\n".freeze
236
+ TYPE_TEXT = "content-type: text/plain; charset=utf-8\r\n".freeze
237
+ TYPE_JSON = "content-type: application/json; charset=utf-8\r\n".freeze
238
238
 
239
239
  def write_headers
240
240
  @io.write(HTTP_11)
241
241
  @headers.each do |k, v|
242
- next if k == "Content-Type"
242
+ next if k == "content-type"
243
243
 
244
244
  @io.write(k)
245
245
  @io.write(COLON_SPACE)
@@ -75,7 +75,7 @@ class MessageBus::Rack::Middleware
75
75
  if @bus.allow_broadcast? && env['PATH_INFO'] == @broadcast_route
76
76
  parsed = Rack::Request.new(env)
77
77
  @bus.publish parsed["channel"], parsed["data"]
78
- return [200, { "Content-Type" => "text/html" }, ["sent"]]
78
+ return [200, { "content-type" => "text/html" }, ["sent"]]
79
79
  end
80
80
 
81
81
  client_id = env['PATH_INFO'][@base_route_length..-1].split("/")[0]
@@ -169,9 +169,9 @@ class MessageBus::Rack::Middleware
169
169
  end
170
170
 
171
171
  if allow_chunked
172
- response.headers["X-Content-Type-Options"] = "nosniff"
173
- response.headers["Transfer-Encoding"] = "chunked"
174
- response.headers["Content-Type"] = "text/plain; charset=utf-8"
172
+ response.headers["x-content-type-options"] = "nosniff"
173
+ response.headers["transfer-encoding"] = "chunked"
174
+ response.headers["content-type"] = "text/plain; charset=utf-8"
175
175
  end
176
176
 
177
177
  response.status = 200
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module MessageBus
4
- VERSION = "4.5.0"
4
+ VERSION = "4.5.2"
5
5
  end
data/message_bus.gemspec CHANGED
@@ -14,9 +14,9 @@ Gem::Specification.new do |gem|
14
14
  gem.name = "message_bus"
15
15
  gem.require_paths = ["lib"]
16
16
  gem.version = MessageBus::VERSION
17
- gem.required_ruby_version = ">= 2.6.0"
17
+ gem.required_ruby_version = ">= 3.2.0"
18
18
 
19
- gem.add_runtime_dependency 'rack', '~> 3'
19
+ gem.add_runtime_dependency 'rack', '> 2', '< 4'
20
20
 
21
21
  # Optional runtime dependencies
22
22
  gem.add_development_dependency 'redis'
@@ -37,7 +37,5 @@ Gem::Specification.new do |gem|
37
37
  gem.add_development_dependency 'oj'
38
38
  gem.add_development_dependency 'yard'
39
39
 
40
- if Gem::Version.new(RUBY_VERSION) >= Gem::Version.new('2.7.0')
41
- gem.add_development_dependency 'rubocop-discourse', '3.8.1'
42
- end
40
+ gem.add_development_dependency 'rubocop-discourse', '3.8.1'
43
41
  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
 
@@ -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
 
@@ -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,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: message_bus
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.5.0
4
+ version: 4.5.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sam Saffron
@@ -13,16 +13,22 @@ dependencies:
13
13
  name: rack
14
14
  requirement: !ruby/object:Gem::Requirement
15
15
  requirements:
16
- - - "~>"
16
+ - - ">"
17
17
  - !ruby/object:Gem::Version
18
- version: '3'
18
+ version: '2'
19
+ - - "<"
20
+ - !ruby/object:Gem::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
+ - - ">"
27
+ - !ruby/object:Gem::Version
28
+ version: '2'
29
+ - - "<"
24
30
  - !ruby/object:Gem::Version
25
- version: '3'
31
+ version: '4'
26
32
  - !ruby/object:Gem::Dependency
27
33
  name: redis
28
34
  requirement: !ruby/object:Gem::Requirement
@@ -302,6 +308,8 @@ files:
302
308
  - examples/chat/docker_container/update_chat
303
309
  - examples/minimal/Gemfile
304
310
  - examples/minimal/config.ru
311
+ - gemfiles/rack2.gemfile
312
+ - gemfiles/rack3.gemfile
305
313
  - lib/message_bus.rb
306
314
  - lib/message_bus/backends.rb
307
315
  - lib/message_bus/backends/base.rb
@@ -360,7 +368,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
360
368
  requirements:
361
369
  - - ">="
362
370
  - !ruby/object:Gem::Version
363
- version: 2.6.0
371
+ version: 3.2.0
364
372
  required_rubygems_version: !ruby/object:Gem::Requirement
365
373
  requirements:
366
374
  - - ">="