protocol-rack 0.2.5 → 0.3.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: 01f7083e192f0a82ca6cf9cb8ff7b11aff04dae2cbe61d792fd7710b17947750
4
- data.tar.gz: 1fcb416ae2acd121010c2d14969db1e0d7849a0dd21849a1cc17f2567ee6bddc
3
+ metadata.gz: 7dae79721011ba76b6565ae1e575bc39a2675906d8d7779030874b3da925c8a5
4
+ data.tar.gz: a8d80d07330a9f17a4d346b3e134187d63153becbbfb05ae2cd403b347e6ad26
5
5
  SHA512:
6
- metadata.gz: bcd5be7a3aee2b0193055534283baf3b9b347775f61ea25cf412e92fe2d69b0c084c566af18ba38efda9a9b15e5573c6796901da9ef19e163917db76212e2219
7
- data.tar.gz: 682fff0aee179137a373a390b335fd5e7a53b88a216e2fe8eddc95f991adebb568542b702e2644acbabb9ccf4a37bddbe775802d94e35e3a323738dbfd50bced
6
+ metadata.gz: 2d695b98ff03053fd4245f6441d7409f2d13ba1804ed0d34e739acf2e0c8d648b62c7f32f18a1f812ad0b63b3f7a5fca250d82970cbf0ac83c0149abfe6ce508
7
+ data.tar.gz: 59a25f01bb637d9b5100f2609d714801a58cbc1ccb8373836ec11b2539cf80300be3f48ebd30590102ad59d4ca29c9c83d18788719cf6d527ecd8bf8f3b4f5dc
checksums.yaml.gz.sig CHANGED
Binary file
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # Released under the MIT License.
4
- # Copyright, 2022, by Samuel Williams.
4
+ # Copyright, 2022-2023, by Samuel Williams.
5
5
 
6
6
  require 'console'
7
7
 
@@ -68,6 +68,11 @@ module Protocol
68
68
 
69
69
  self.unwrap_headers(request.headers, env)
70
70
 
71
+ # For the sake of compatibility, we set the `HTTP_UPGRADE` header to the requested protocol.
72
+ if protocol = request.protocol and request.version.start_with?('http/1')
73
+ env[CGI::HTTP_UPGRADE] = Array(protocol).join(",")
74
+ end
75
+
71
76
  # HTTP/2 prefers `:authority` over `host`, so we do this for backwards compatibility.
72
77
  env[CGI::HTTP_HOST] ||= request.authority
73
78
 
@@ -78,6 +83,12 @@ module Protocol
78
83
  end
79
84
  end
80
85
 
86
+ def make_environment(request)
87
+ {
88
+ request: request
89
+ }
90
+ end
91
+
81
92
  # Build a rack `env` from the incoming request and apply it to the rack middleware.
82
93
  #
83
94
  # @parameter request [Protocol::HTTP::Request] The incoming request.
@@ -86,6 +97,16 @@ module Protocol
86
97
 
87
98
  status, headers, body = @app.call(env)
88
99
 
100
+ # The status must always be an integer.
101
+ unless status.is_a?(Integer)
102
+ raise ArgumentError, "Status must be an integer!"
103
+ end
104
+
105
+ # Headers must always be a hash or equivalent.
106
+ unless headers
107
+ raise ArgumentError, "Headers must not be nil!"
108
+ end
109
+
89
110
  headers, meta = self.wrap_headers(headers)
90
111
 
91
112
  return Response.wrap(env, status, headers, meta, body, request)
@@ -126,7 +126,6 @@ module Protocol
126
126
 
127
127
  if protocol = response.protocol
128
128
  headers['rack.protocol'] = protocol
129
- # headers['upgrade'] = protocol
130
129
  end
131
130
 
132
131
  if body = response.body and body.stream?
@@ -11,6 +11,7 @@ module Protocol
11
11
  # CGI keys <https://tools.ietf.org/html/rfc3875#section-4.1>:
12
12
  module CGI
13
13
  HTTP_HOST = 'HTTP_HOST'
14
+ HTTP_UPGRADE = "HTTP_UPGRADE"
14
15
  PATH_INFO = 'PATH_INFO'
15
16
  REQUEST_METHOD = 'REQUEST_METHOD'
16
17
  REQUEST_PATH = 'REQUEST_PATH'
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # Released under the MIT License.
4
- # Copyright, 2022, by Samuel Williams.
4
+ # Copyright, 2022-2023, by Samuel Williams.
5
5
  # Copyright, 2023, by Genki Takiuchi.
6
6
 
7
7
  require 'async/io/buffer'
@@ -6,6 +6,7 @@
6
6
  require 'protocol/http/request'
7
7
  require 'protocol/http/headers'
8
8
 
9
+ require_relative 'constants'
9
10
  require_relative 'body/input_wrapper'
10
11
 
11
12
  module Protocol
@@ -30,12 +31,10 @@ module Protocol
30
31
  )
31
32
  end
32
33
 
33
- HTTP_UPGRADE = 'HTTP_UPGRADE'
34
-
35
34
  def self.protocol(env)
36
35
  if protocols = env['rack.protocol']
37
36
  return Array(protocols)
38
- elsif protocols = env[HTTP_UPGRADE]
37
+ elsif protocols = env[CGI::HTTP_UPGRADE]
39
38
  return protocols.split(/\s*,\s*/)
40
39
  end
41
40
  end
@@ -1,10 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # Released under the MIT License.
4
- # Copyright, 2022, by Samuel Williams.
4
+ # Copyright, 2022-2023, by Samuel Williams.
5
5
 
6
6
  module Protocol
7
7
  module Rack
8
- VERSION = "0.2.5"
8
+ VERSION = "0.3.0"
9
9
  end
10
10
  end
data/readme.md CHANGED
@@ -71,6 +71,14 @@ We welcome contributions to this project.
71
71
  4. Push to the branch (`git push origin my-new-feature`).
72
72
  5. Create new Pull Request.
73
73
 
74
+ ### Developer Certificate of Origin
75
+
76
+ This project uses the [Developer Certificate of Origin](https://developercertificate.org/). All contributors to this project must agree to this document to have their contributions accepted.
77
+
78
+ ### Contributor Covenant
79
+
80
+ This project is governed by [Contributor Covenant](https://www.contributor-covenant.org/). All contributors and participants agree to abide by its terms.
81
+
74
82
  ## See Also
75
83
 
76
84
  - [protocol-http](https://github.com/socketry/protocol-http) — General abstractions for HTTP client/server implementations.
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.2.5
4
+ version: 0.3.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: 2023-06-03 00:00:00.000000000 Z
41
+ date: 2023-12-11 00:00:00.000000000 Z
42
42
  dependencies:
43
43
  - !ruby/object:Gem::Dependency
44
44
  name: protocol-http
@@ -68,90 +68,6 @@ dependencies:
68
68
  - - ">="
69
69
  - !ruby/object:Gem::Version
70
70
  version: '1.0'
71
- - !ruby/object:Gem::Dependency
72
- name: async-http
73
- requirement: !ruby/object:Gem::Requirement
74
- requirements:
75
- - - "~>"
76
- - !ruby/object:Gem::Version
77
- version: '0.59'
78
- type: :development
79
- prerelease: false
80
- version_requirements: !ruby/object:Gem::Requirement
81
- requirements:
82
- - - "~>"
83
- - !ruby/object:Gem::Version
84
- version: '0.59'
85
- - !ruby/object:Gem::Dependency
86
- name: bake-test
87
- requirement: !ruby/object:Gem::Requirement
88
- requirements:
89
- - - "~>"
90
- - !ruby/object:Gem::Version
91
- version: '0.1'
92
- type: :development
93
- prerelease: false
94
- version_requirements: !ruby/object:Gem::Requirement
95
- requirements:
96
- - - "~>"
97
- - !ruby/object:Gem::Version
98
- version: '0.1'
99
- - !ruby/object:Gem::Dependency
100
- name: bake-test-external
101
- requirement: !ruby/object:Gem::Requirement
102
- requirements:
103
- - - "~>"
104
- - !ruby/object:Gem::Version
105
- version: '0.1'
106
- type: :development
107
- prerelease: false
108
- version_requirements: !ruby/object:Gem::Requirement
109
- requirements:
110
- - - "~>"
111
- - !ruby/object:Gem::Version
112
- version: '0.1'
113
- - !ruby/object:Gem::Dependency
114
- name: covered
115
- requirement: !ruby/object:Gem::Requirement
116
- requirements:
117
- - - "~>"
118
- - !ruby/object:Gem::Version
119
- version: '0.16'
120
- type: :development
121
- prerelease: false
122
- version_requirements: !ruby/object:Gem::Requirement
123
- requirements:
124
- - - "~>"
125
- - !ruby/object:Gem::Version
126
- version: '0.16'
127
- - !ruby/object:Gem::Dependency
128
- name: sus
129
- requirement: !ruby/object:Gem::Requirement
130
- requirements:
131
- - - "~>"
132
- - !ruby/object:Gem::Version
133
- version: '0.12'
134
- type: :development
135
- prerelease: false
136
- version_requirements: !ruby/object:Gem::Requirement
137
- requirements:
138
- - - "~>"
139
- - !ruby/object:Gem::Version
140
- version: '0.12'
141
- - !ruby/object:Gem::Dependency
142
- name: sus-fixtures-async-http
143
- requirement: !ruby/object:Gem::Requirement
144
- requirements:
145
- - - "~>"
146
- - !ruby/object:Gem::Version
147
- version: '0.1'
148
- type: :development
149
- prerelease: false
150
- version_requirements: !ruby/object:Gem::Requirement
151
- requirements:
152
- - - "~>"
153
- - !ruby/object:Gem::Version
154
- version: '0.1'
155
71
  description:
156
72
  email:
157
73
  executables: []
@@ -187,14 +103,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
187
103
  requirements:
188
104
  - - ">="
189
105
  - !ruby/object:Gem::Version
190
- version: '2.5'
106
+ version: '3.0'
191
107
  required_rubygems_version: !ruby/object:Gem::Requirement
192
108
  requirements:
193
109
  - - ">="
194
110
  - !ruby/object:Gem::Version
195
111
  version: '0'
196
112
  requirements: []
197
- rubygems_version: 3.4.7
113
+ rubygems_version: 3.4.22
198
114
  signing_key:
199
115
  specification_version: 4
200
116
  summary: An implementation of the Rack protocol/specification.
metadata.gz.sig CHANGED
@@ -1 +1,6 @@
1
- #�"
1
+ ��aH)�6m��������k+�?k}��錸DA�*������P��f��@`��@�T��1l�`|{�;�㣉�m�l��A���`q�l���d���Y�W��e|Ӕ
2
+ ����T�Y ������mv!���8t���QY�8��Q��q�K��@�##�"�>|�
3
+ w� �s7���xZc$0nT��^�/5"h�i1�h"I�h�7�.ژ�}h. |U
4
+ msUe��mG�ʎ��c�_�$lG)EV��xw��E
5
+ ��Z5U�V�5z�~TS(��~@��ܒ:�$�ۤ��7�+�T%�1$K2l�p���
6
+ 1"š&��qf�t�