protocol-rack 0.5.1 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f8eef2db46dd32a4307561b5d6d05b5b3874971473f0a01f669122bba02aa2f4
4
- data.tar.gz: 24f7ce0dec015114a5d6a984ef3b3075446fee220975b1a9060100588124d262
3
+ metadata.gz: abae8a03873e4b82fb2d64d88e0a3014a9fd8c0d9eacca1aeb419fb4651f32f8
4
+ data.tar.gz: 1d1ae6ec253f7fe688907563ed0cdd16cc2e482325344d36384cd6647b403227
5
5
  SHA512:
6
- metadata.gz: aaf3f413e3667955841c43dfbd66d0ed930bf0454a9fda0740af3d24ee2cab7055fa3dbe4807f4aa4d7684747e96567216eb9490a412ed68bc6c2a94c125fe60
7
- data.tar.gz: b8055752788740184967b2ab59a9c9c612659451797aadadc956358b661e876afe7e8465dfc2ae72e5f4d27be27514a5a70ad76cd726460036ef1c41bc986d58
6
+ metadata.gz: 65c3cfc64676c05b7c7c380a89d4c1f6ab3fa196899877651a574437c6587dab36c75c46f3a1031afb6e13a2e5bedc3cbbf7d39111bbf873b7875bec0ef43a81
7
+ data.tar.gz: b8f67ded7fc90df8893e98873f3300ba9e2af062d368917216e6f13447e41737c2ed0ae339557932cdf73008df64c4ad5a6a2423af9655bdb96921bb29d06f6d
checksums.yaml.gz.sig CHANGED
Binary file
@@ -45,7 +45,11 @@ module Protocol
45
45
  http_key = "HTTP_#{key.upcase.tr('-', '_')}"
46
46
 
47
47
  if current_value = env[http_key]
48
- env[http_key] = "#{current_value};#{value}"
48
+ if http_key == CGI::HTTP_COOKIE
49
+ env[http_key] = "#{current_value};#{value}"
50
+ else
51
+ env[http_key] = "#{current_value},#{value}"
52
+ end
49
53
  else
50
54
  env[http_key] = value
51
55
  end
@@ -138,6 +142,20 @@ module Protocol
138
142
  def failure_response(exception)
139
143
  Protocol::HTTP::Response.for_exception(exception)
140
144
  end
145
+
146
+ def self.extract_protocol(env, response, headers)
147
+ if protocol = response.protocol
148
+ # This is the newer mechanism for protocol upgrade:
149
+ if env['rack.protocol']
150
+ headers['rack.protocol'] = protocol
151
+
152
+ # Older mechanism for protocol upgrade:
153
+ elsif env[CGI::HTTP_UPGRADE]
154
+ headers['upgrade'] = protocol
155
+ headers['connection'] = 'upgrade'
156
+ end
157
+ end
158
+ end
141
159
  end
142
160
  end
143
161
  end
@@ -11,7 +11,7 @@ require_relative '../rewindable'
11
11
  module Protocol
12
12
  module Rack
13
13
  module Adapter
14
- class Rack2 < Generic
14
+ class Rack2 < Generic
15
15
  RACK_VERSION = 'rack.version'
16
16
  RACK_MULTITHREAD = 'rack.multithread'
17
17
  RACK_MULTIPROCESS = 'rack.multiprocess'
@@ -121,9 +121,7 @@ module Protocol
121
121
  # These interfaces should be largely compatible:
122
122
  headers = response.headers.to_h
123
123
 
124
- if protocol = response.protocol
125
- headers['rack.protocol'] = protocol
126
- end
124
+ self.extract_protocol(env, response, headers)
127
125
 
128
126
  if body = response.body and body.stream?
129
127
  if env[RACK_IS_HIJACK]
@@ -92,9 +92,8 @@ module Protocol
92
92
  def self.make_response(env, response)
93
93
  # These interfaces should be largely compatible:
94
94
  headers = response.headers.to_h
95
- if protocol = response.protocol
96
- headers['rack.protocol'] = protocol
97
- end
95
+
96
+ self.extract_protocol(env, response, headers)
98
97
 
99
98
  if body = response.body and body.stream?
100
99
  # Force streaming response:
@@ -22,22 +22,38 @@ module Protocol
22
22
  class Output
23
23
  def initialize(input, block)
24
24
  stream = ::Protocol::HTTP::Body::Stream.new(input, self)
25
- @fiber = Fiber.new do
25
+
26
+ @from = nil
27
+
28
+ @fiber = Fiber.new do |from|
29
+ @from = from
26
30
  block.call(stream)
27
31
  @fiber = nil
28
32
  end
29
33
  end
30
34
 
31
35
  def write(chunk)
32
- Fiber.yield(chunk)
36
+ if from = @from
37
+ @from = nil
38
+ @from = from.transfer(chunk)
39
+ else
40
+ raise RuntimeError, "Stream is not being read!"
41
+ end
33
42
  end
34
43
 
35
44
  def close
36
45
  @fiber = nil
46
+
47
+ if from = @from
48
+ @from = nil
49
+ from.transfer(nil)
50
+ end
37
51
  end
38
52
 
39
53
  def read
40
- @fiber&.resume
54
+ raise RuntimeError, "Stream is already being read!" if @from
55
+
56
+ @fiber&.transfer(Fiber.current)
41
57
  end
42
58
  end
43
59
 
@@ -25,6 +25,8 @@ module Protocol
25
25
  CONTENT_TYPE = 'CONTENT_TYPE'
26
26
  CONTENT_LENGTH = 'CONTENT_LENGTH'
27
27
 
28
+ HTTP_COOKIE = 'HTTP_COOKIE'
29
+
28
30
  # Header constants:
29
31
  HTTP_X_FORWARDED_PROTO = 'HTTP_X_FORWARDED_PROTO'
30
32
  end
@@ -30,8 +30,6 @@ module Protocol
30
30
 
31
31
  include Protocol::HTTP::Body::Stream::Reader
32
32
 
33
- alias gets read_partial
34
-
35
33
  # Enumerate chunks of the request body.
36
34
  # @yields {|chunk| ...}
37
35
  # @parameter chunk [String]
@@ -5,6 +5,6 @@
5
5
 
6
6
  module Protocol
7
7
  module Rack
8
- VERSION = "0.5.1"
8
+ VERSION = "0.7.0"
9
9
  end
10
10
  end
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: protocol-rack
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.1
4
+ version: 0.7.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Samuel Williams
@@ -38,7 +38,7 @@ cert_chain:
38
38
  Q2K9NVun/S785AP05vKkXZEFYxqG6EW012U4oLcFl5MySFajYXRYbuUpH6AY+HP8
39
39
  voD0MPg1DssDLKwXyt1eKD/+Fq0bFWhwVM/1XiAXL7lyYUyOq24KHgQ2Csg=
40
40
  -----END CERTIFICATE-----
41
- date: 2024-04-24 00:00:00.000000000 Z
41
+ date: 2024-09-02 00:00:00.000000000 Z
42
42
  dependencies:
43
43
  - !ruby/object:Gem::Dependency
44
44
  name: protocol-http
@@ -46,14 +46,14 @@ dependencies:
46
46
  requirements:
47
47
  - - "~>"
48
48
  - !ruby/object:Gem::Version
49
- version: '0.23'
49
+ version: '0.27'
50
50
  type: :runtime
51
51
  prerelease: false
52
52
  version_requirements: !ruby/object:Gem::Requirement
53
53
  requirements:
54
54
  - - "~>"
55
55
  - !ruby/object:Gem::Version
56
- version: '0.23'
56
+ version: '0.27'
57
57
  - !ruby/object:Gem::Dependency
58
58
  name: rack
59
59
  requirement: !ruby/object:Gem::Requirement
@@ -112,7 +112,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
112
112
  - !ruby/object:Gem::Version
113
113
  version: '0'
114
114
  requirements: []
115
- rubygems_version: 3.5.3
115
+ rubygems_version: 3.5.11
116
116
  signing_key:
117
117
  specification_version: 4
118
118
  summary: An implementation of the Rack protocol/specification.
metadata.gz.sig CHANGED
Binary file