tp2 0.19.4 → 0.20.0

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: 9e014b48f0e569963bc4a7c69735b7d3b2745e0300285be727e56a822302705d
4
- data.tar.gz: 8a620cba8ce06490c6b4c4fd830ab2883b65a41a133aa86cf0f3c382610c0c1b
3
+ metadata.gz: f50f04dad197bd317793e48f2f46e90f87c0ddf0f65c98d99c57cc8e29a24f66
4
+ data.tar.gz: 287838481d4b0e8150c021368cf709543331b5d4b0e87bb37b335c750c8ae267
5
5
  SHA512:
6
- metadata.gz: 03b13bf4d0529187cf96f862aa0bae5698e72337e39a2c820e319342dac8f9d8994f86bd66da2e9637947f330cac0c86ce0bec1fee299d92cc3430281231b3fc
7
- data.tar.gz: 23c1881fc7db29bd5b78325a1fc7338674acb8a9db5b7cd735f0ea77e904e667312c6c49acf61b919743bdad1e375a4e519b9f517f4144b24347ab9c25d50356
6
+ metadata.gz: 1597b8856cdb6adf327652d5e161d7f8b9965358b9898ebbf2f8a5eeb5af994e3d9110b09093867ae651c9237dd4f3f31b10d7bb2a8d6e0854cb5379980d8e7d
7
+ data.tar.gz: 9f85ecb5c04107b8db550a7996429d39e39baab2efbcf3a355cfcb756ba6be45fb009a9da63ab2cf44fbda4bd2bec15b5187a65e867c97ac6d8b6aeeb7479832
@@ -8,7 +8,7 @@ jobs:
8
8
  fail-fast: false
9
9
  matrix:
10
10
  os: [ubuntu-latest]
11
- ruby: ['head']
11
+ ruby: ['4.0', 'head']
12
12
 
13
13
  name: >-
14
14
  ${{matrix.os}}, ${{matrix.ruby}}
data/CHANGELOG.md CHANGED
@@ -1,3 +1,8 @@
1
+ # 0.20.0 2026-01-28
2
+
3
+ - Update Qeweney
4
+ - Fix lack of sendv (for kernels < 6.17)
5
+
1
6
  # 0.19.4 2026-01-26
2
7
 
3
8
  - Fix and make graceful_shutdown idempotent
@@ -158,25 +158,45 @@ module TP2
158
158
 
159
159
  CHUNKED_ENCODING_POSTLUDE = "\r\n#{EMPTY_CHUNK}"
160
160
 
161
- # Sends response including headers and body. Waits for the request to complete
162
- # if not yet completed. The body is sent using chunked transfer encoding.
163
- # @param request [Qeweney::Request] HTTP request
164
- # @param body [String] response body
165
- # @param headers
166
- def respond(request, body, headers)
167
- headers = @response_headers.merge(headers) if @response_headers
168
-
169
- formatted_headers = format_headers(headers, body)
170
- @response_headers = headers
171
- request&.tx_incr(formatted_headers.bytesize + (body ? body.bytesize : 0))
172
- if body
173
- chunk_prelude = "#{body.bytesize.to_s(16)}\r\n"
174
- @machine.sendv(@fd, formatted_headers, chunk_prelude, body, CHUNKED_ENCODING_POSTLUDE)
175
- else
176
- @machine.send(@fd, formatted_headers, formatted_headers.bytesize, SEND_FLAGS)
161
+ if UM.instance_methods.include?(:sendv)
162
+ # Sends response including headers and body. Waits for the request to complete
163
+ # if not yet completed. The body is sent using chunked transfer encoding.
164
+ # @param request [Qeweney::Request] HTTP request
165
+ # @param body [String] response body
166
+ # @param headers
167
+ def respond(request, body, headers)
168
+ headers = @response_headers.merge(headers) if @response_headers
169
+
170
+ formatted_headers = format_headers(headers, body)
171
+ @response_headers = headers
172
+ request&.tx_incr(formatted_headers.bytesize + (body ? body.bytesize : 0))
173
+ if body
174
+ chunk_prelude = "#{body.bytesize.to_s(16)}\r\n"
175
+ @machine.sendv(@fd, formatted_headers, chunk_prelude, body, CHUNKED_ENCODING_POSTLUDE)
176
+ else
177
+ @machine.send(@fd, formatted_headers, formatted_headers.bytesize, SEND_FLAGS)
178
+ end
179
+ @logger&.info(request: request, response_headers: headers) if request
180
+ @done = true
181
+ end
182
+ else
183
+ def respond(request, body, headers)
184
+ headers = @response_headers.merge(headers) if @response_headers
185
+
186
+ formatted_headers = format_headers(headers, body)
187
+ @response_headers = headers
188
+ request&.tx_incr(formatted_headers.bytesize + (body ? body.bytesize : 0))
189
+ if body
190
+ chunk_prelude = "#{body.bytesize.to_s(16)}\r\n"
191
+ buf = +''
192
+ buf << formatted_headers << chunk_prelude << body << CHUNKED_ENCODING_POSTLUDE
193
+ @machine.send(@fd, buf, SEND_FLAGS)
194
+ else
195
+ @machine.send(@fd, formatted_headers, formatted_headers.bytesize, SEND_FLAGS)
196
+ end
197
+ @logger&.info(request: request, response_headers: headers) if request
198
+ @done = true
177
199
  end
178
- @logger&.info(request: request, response_headers: headers) if request
179
- @done = true
180
200
  end
181
201
 
182
202
  # Sends response headers. If empty_response is truthy, the response status
data/lib/tp2/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module TP2
2
- VERSION = '0.19.4'
2
+ VERSION = '0.20.0'
3
3
  end
@@ -491,9 +491,9 @@ class ConnectionTest < Minitest::Test
491
491
  @machine.snooze
492
492
  end
493
493
 
494
- content = IO.read(__FILE__)
494
+ content = IO.read(fn)
495
495
  file_size = content.bytesize
496
- expected = "HTTP/1.1 200\r\nTransfer-Encoding: chunked\r\n\r\n6\r\nfoobar\r\n0\r\n\r\n"
496
+ expected = "HTTP/1.1 200\r\nTransfer-Encoding: chunked\r\n\r\n#{file_size.to_s(16)}\r\n#{content}\r\n0\r\n\r\n"
497
497
 
498
498
  assert_equal expected, response
499
499
  end
@@ -545,7 +545,7 @@ class ConnectionTest < Minitest::Test
545
545
  assert_equal expected, response
546
546
  end
547
547
 
548
- def test_set_response_headers
548
+ def test_set_response_headers_1
549
549
  @hook = ->(req) {
550
550
  req.set_response_headers("Set-Cookie" => 'foo=bar')
551
551
  req.respond('foo')
@@ -569,7 +569,7 @@ class ConnectionTest < Minitest::Test
569
569
  assert_equal expected, response
570
570
  end
571
571
 
572
- def test_set_response_headers
572
+ def test_set_response_headers_2
573
573
  @hook = ->(req) {
574
574
  req.set_response_headers("Set-Cookie" => 'foo=bar')
575
575
  req.set_response_headers("Foo" => 'bar')
data/tp2.gemspec CHANGED
@@ -21,6 +21,6 @@ Gem::Specification.new do |s|
21
21
  s.executables = ['tp2']
22
22
 
23
23
  s.add_dependency 'uringmachine', '~> 0.23.1'
24
- s.add_dependency 'qeweney', '~> 0.23'
24
+ s.add_dependency 'qeweney', '~> 0.25'
25
25
  s.add_dependency 'rack', '~> 3.1.15'
26
26
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tp2
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.19.4
4
+ version: 0.20.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sharon Rosner
@@ -29,14 +29,14 @@ dependencies:
29
29
  requirements:
30
30
  - - "~>"
31
31
  - !ruby/object:Gem::Version
32
- version: '0.23'
32
+ version: '0.25'
33
33
  type: :runtime
34
34
  prerelease: false
35
35
  version_requirements: !ruby/object:Gem::Requirement
36
36
  requirements:
37
37
  - - "~>"
38
38
  - !ruby/object:Gem::Version
39
- version: '0.23'
39
+ version: '0.25'
40
40
  - !ruby/object:Gem::Dependency
41
41
  name: rack
42
42
  requirement: !ruby/object:Gem::Requirement