message_bus 4.5.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: bfc460d9e05c0273fa4136ea6f7756ef7fc262cf9202103f4f24a23c25d77276
4
- data.tar.gz: 171e848f636251b6b585de15c2fe869c8d2687380bc2b0965fdc33d8661a0cec
3
+ metadata.gz: e0f8dcac413e4d7ebfd5518440b1bae9311dfee8395d13b9c9a137aed8048689
4
+ data.tar.gz: dd16dc24af70834d8d62ecbc5f570e7790e00c78f876eee3c3b35483e7e576ab
5
5
  SHA512:
6
- metadata.gz: f9a1d9635fe6b2e9f51a87ce3c9a7e6bc0e1218a349af8e1a8ed62c77f37ebb8a6f89f630e83f6459f41804d442f644366ec44d3bad76e42d09e572510f23614
7
- data.tar.gz: e05072c606a9114d6b817c8c6eead0ba2122f291fd251b5e644013246dcc98394ae3153c2e5530bc499c00a3713164d7d432cfee8f4407867b61c2040fb985a0
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.1"
4
+ VERSION = "4.5.2"
5
5
  end
data/message_bus.gemspec CHANGED
@@ -14,7 +14,7 @@ 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
19
  gem.add_runtime_dependency 'rack', '> 2', '< 4'
20
20
 
@@ -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.1
4
+ version: 4.5.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sam Saffron
@@ -308,6 +308,8 @@ files:
308
308
  - examples/chat/docker_container/update_chat
309
309
  - examples/minimal/Gemfile
310
310
  - examples/minimal/config.ru
311
+ - gemfiles/rack2.gemfile
312
+ - gemfiles/rack3.gemfile
311
313
  - lib/message_bus.rb
312
314
  - lib/message_bus/backends.rb
313
315
  - lib/message_bus/backends/base.rb
@@ -366,7 +368,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
366
368
  requirements:
367
369
  - - ">="
368
370
  - !ruby/object:Gem::Version
369
- version: 2.6.0
371
+ version: 3.2.0
370
372
  required_rubygems_version: !ruby/object:Gem::Requirement
371
373
  requirements:
372
374
  - - ">="