protocol-http 0.23.12 → 0.24.1

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.
Files changed (43) hide show
  1. checksums.yaml +4 -4
  2. checksums.yaml.gz.sig +0 -0
  3. data/design.md +167 -0
  4. data/lib/protocol/http/accept_encoding.rb +5 -20
  5. data/lib/protocol/http/body/buffered.rb +3 -19
  6. data/lib/protocol/http/body/completable.rb +2 -19
  7. data/lib/protocol/http/body/deflate.rb +3 -30
  8. data/lib/protocol/http/body/digestable.rb +9 -21
  9. data/lib/protocol/http/body/file.rb +4 -21
  10. data/lib/protocol/http/body/head.rb +3 -20
  11. data/lib/protocol/http/body/inflate.rb +8 -22
  12. data/lib/protocol/http/body/readable.rb +6 -23
  13. data/lib/protocol/http/body/reader.rb +5 -21
  14. data/lib/protocol/http/body/rewindable.rb +2 -19
  15. data/lib/protocol/http/body/stream.rb +6 -23
  16. data/lib/protocol/http/body/wrapper.rb +2 -19
  17. data/lib/protocol/http/content_encoding.rb +2 -19
  18. data/lib/protocol/http/cookie.rb +3 -19
  19. data/lib/protocol/http/error.rb +2 -19
  20. data/lib/protocol/http/header/authorization.rb +2 -19
  21. data/lib/protocol/http/header/cache_control.rb +4 -21
  22. data/lib/protocol/http/header/connection.rb +4 -21
  23. data/lib/protocol/http/header/cookie.rb +2 -19
  24. data/lib/protocol/http/header/etag.rb +3 -20
  25. data/lib/protocol/http/header/etags.rb +2 -19
  26. data/lib/protocol/http/header/multiple.rb +2 -19
  27. data/lib/protocol/http/header/split.rb +8 -21
  28. data/lib/protocol/http/header/vary.rb +2 -19
  29. data/lib/protocol/http/headers.rb +12 -19
  30. data/lib/protocol/http/methods.rb +2 -19
  31. data/lib/protocol/http/middleware/builder.rb +2 -19
  32. data/lib/protocol/http/middleware.rb +2 -19
  33. data/lib/protocol/http/reference.rb +77 -69
  34. data/lib/protocol/http/request.rb +3 -20
  35. data/lib/protocol/http/response.rb +10 -20
  36. data/lib/protocol/http/url.rb +4 -20
  37. data/lib/protocol/http/version.rb +3 -20
  38. data/lib/protocol/http.rb +2 -19
  39. data/license.md +27 -0
  40. data/readme.md +32 -0
  41. data.tar.gz.sig +0 -0
  42. metadata +9 -4
  43. metadata.gz.sig +0 -0
@@ -1,24 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright, 2018, by Samuel G. D. Williams. <http://www.codeotaku.com>
4
- #
5
- # Permission is hereby granted, free of charge, to any person obtaining a copy
6
- # of this software and associated documentation files (the "Software"), to deal
7
- # in the Software without restriction, including without limitation the rights
8
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- # copies of the Software, and to permit persons to whom the Software is
10
- # furnished to do so, subject to the following conditions:
11
- #
12
- # The above copyright notice and this permission notice shall be included in
13
- # all copies or substantial portions of the Software.
14
- #
15
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
- # THE SOFTWARE.
3
+ # Released under the MIT License.
4
+ # Copyright, 2018-2023, by Samuel Williams.
22
5
 
23
6
  require_relative 'url'
24
7
 
@@ -31,14 +14,14 @@ module Protocol
31
14
  # Generate a reference from a path and user parameters. The path may contain a `#fragment` or `?query=parameters`.
32
15
  def self.parse(path = '/', parameters = nil)
33
16
  base, fragment = path.split('#', 2)
34
- path, query_string = base.split('?', 2)
17
+ path, query = base.split('?', 2)
35
18
 
36
- self.new(path, query_string, fragment, parameters)
19
+ self.new(path, query, fragment, parameters)
37
20
  end
38
21
 
39
- def initialize(path = '/', query_string = nil, fragment = nil, parameters = nil)
22
+ def initialize(path = '/', query = nil, fragment = nil, parameters = nil)
40
23
  @path = path
41
- @query_string = query_string
24
+ @query = query
42
25
  @fragment = fragment
43
26
  @parameters = parameters
44
27
  end
@@ -47,7 +30,7 @@ module Protocol
47
30
  attr_accessor :path
48
31
 
49
32
  # The un-parsed query string, e.g. 'x=10&y=20'
50
- attr_accessor :query_string
33
+ attr_accessor :query
51
34
 
52
35
  # A fragment, the part after the '#'
53
36
  attr_accessor :fragment
@@ -59,7 +42,7 @@ module Protocol
59
42
  return self if frozen?
60
43
 
61
44
  @path.freeze
62
- @query_string.freeze
45
+ @query.freeze
63
46
  @fragment.freeze
64
47
  @parameters.freeze
65
48
 
@@ -67,7 +50,7 @@ module Protocol
67
50
  end
68
51
 
69
52
  def to_ary
70
- [@path, @query_string, @fragment, @parameters]
53
+ [@path, @query, @fragment, @parameters]
71
54
  end
72
55
 
73
56
  def <=> other
@@ -86,8 +69,8 @@ module Protocol
86
69
  @parameters and !@parameters.empty?
87
70
  end
88
71
 
89
- def query_string?
90
- @query_string and !@query_string.empty?
72
+ def query?
73
+ @query and !@query.empty?
91
74
  end
92
75
 
93
76
  def fragment?
@@ -95,8 +78,8 @@ module Protocol
95
78
  end
96
79
 
97
80
  def append(buffer)
98
- if query_string?
99
- buffer << URL.escape_path(@path) << '?' << @query_string
81
+ if query?
82
+ buffer << URL.escape_path(@path) << '?' << @query
100
83
  buffer << '&' << URL.encode(@parameters) if parameters?
101
84
  else
102
85
  buffer << URL.escape_path(@path)
@@ -120,7 +103,7 @@ module Protocol
120
103
 
121
104
  self.class.new(
122
105
  expand_path(self.path, other.path, true),
123
- other.query_string,
106
+ other.query,
124
107
  other.fragment,
125
108
  other.parameters,
126
109
  )
@@ -131,34 +114,34 @@ module Protocol
131
114
  self.class.new(@path, nil, nil, nil)
132
115
  end
133
116
 
134
- # @option path [String] Append the string to this reference similar to `File.join`.
135
- # @option parameters [Hash] Append the parameters to this reference.
136
- # @option fragment [String] Set the fragment to this value.
137
- def with(path: nil, parameters: nil, fragment: @fragment)
117
+ # Update the reference with the given path, parameters and fragment.
118
+ # @argument path [String] Append the string to this reference similar to `File.join`.
119
+ # @argument parameters [Hash] Append the parameters to this reference.
120
+ # @argument fragment [String] Set the fragment to this value.
121
+ # @argument pop [Boolean] If the path contains a trailing filename, pop the last component of the path before appending the new path.
122
+ # @argument merge [Boolean] If the parameters are specified, merge them with the existing parameters.
123
+ def with(path: nil, parameters: nil, fragment: @fragment, pop: false, merge: true)
138
124
  if @parameters
139
- if parameters
125
+ if parameters and merge
140
126
  parameters = @parameters.merge(parameters)
141
127
  else
142
128
  parameters = @parameters
143
129
  end
144
130
  end
145
131
 
146
- if path
147
- path = expand_path(@path, path, false)
132
+ if @query and !merge
133
+ query = nil
148
134
  else
149
- path = @path
135
+ query = @query
150
136
  end
151
137
 
152
- self.class.new(path, @query_string, fragment, parameters)
153
- end
154
-
155
- # The arguments to this function are legacy, prefer to use `with`.
156
- def dup(path = nil, parameters = nil, merge_parameters = true)
157
- if merge_parameters
158
- with(path: path, parameters: parameters)
138
+ if path
139
+ path = expand_path(@path, path, pop)
159
140
  else
160
- self.base.with(path: path, parameters: parameters)
141
+ path = @path
161
142
  end
143
+
144
+ self.class.new(path, query, fragment, parameters)
162
145
  end
163
146
 
164
147
  private
@@ -171,33 +154,58 @@ module Protocol
171
154
  end
172
155
  end
173
156
 
157
+ def expand_absolute_path(path, parts)
158
+ parts.each do |part|
159
+ if part == '..'
160
+ path.pop
161
+ elsif part == '.'
162
+ # Do nothing.
163
+ else
164
+ path << part
165
+ end
166
+ end
167
+
168
+ if path.first != ''
169
+ path.unshift('')
170
+ end
171
+ end
172
+
173
+ def expand_relative_path(path, parts)
174
+ parts.each do |part|
175
+ if part == '..' and path.any?
176
+ path.pop
177
+ elsif part == '.'
178
+ # Do nothing.
179
+ else
180
+ path << part
181
+ end
182
+ end
183
+ end
184
+
174
185
  # @param pop [Boolean] whether to remove the last path component of the base path, to conform to URI merging behaviour, as defined by RFC2396.
175
186
  def expand_path(base, relative, pop = true)
176
187
  if relative.start_with? '/'
177
188
  return relative
178
- else
179
- path = split(base)
180
-
181
- # RFC2396 Section 5.2:
182
- # 6) a) All but the last segment of the base URI's path component is
183
- # copied to the buffer. In other words, any characters after the
184
- # last (right-most) slash character, if any, are excluded.
185
- path.pop if pop or path.last == ''
186
-
187
- parts = split(relative)
188
-
189
- parts.each do |part|
190
- if part == '..'
191
- path.pop
192
- elsif part == '.'
193
- # Do nothing.
194
- else
195
- path << part
196
- end
197
- end
198
-
199
- return path.join('/')
200
189
  end
190
+
191
+ path = split(base)
192
+
193
+ # RFC2396 Section 5.2:
194
+ # 6) a) All but the last segment of the base URI's path component is
195
+ # copied to the buffer. In other words, any characters after the
196
+ # last (right-most) slash character, if any, are excluded.
197
+ path.pop if pop or path.last == ''
198
+
199
+ parts = split(relative)
200
+
201
+ # Absolute path:
202
+ if path.first == ''
203
+ expand_absolute_path(path, parts)
204
+ else
205
+ expand_relative_path(path, parts)
206
+ end
207
+
208
+ return path.join('/')
201
209
  end
202
210
  end
203
211
  end
@@ -1,24 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright, 2017, by Samuel G. D. Williams. <http://www.codeotaku.com>
4
- #
5
- # Permission is hereby granted, free of charge, to any person obtaining a copy
6
- # of this software and associated documentation files (the "Software"), to deal
7
- # in the Software without restriction, including without limitation the rights
8
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- # copies of the Software, and to permit persons to whom the Software is
10
- # furnished to do so, subject to the following conditions:
11
- #
12
- # The above copyright notice and this permission notice shall be included in
13
- # all copies or substantial portions of the Software.
14
- #
15
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
- # THE SOFTWARE.
3
+ # Released under the MIT License.
4
+ # Copyright, 2019-2023, by Samuel Williams.
22
5
 
23
6
  require_relative 'body/buffered'
24
7
  require_relative 'body/reader'
@@ -79,7 +62,7 @@ module Protocol
79
62
  @method == Methods::CONNECT
80
63
  end
81
64
 
82
- def self.[](method, path, headers, body)
65
+ def self.[](method, path, headers = nil, body = nil)
83
66
  body = Body::Buffered.wrap(body)
84
67
  headers = ::Protocol::HTTP::Headers[headers]
85
68
 
@@ -1,24 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright, 2017, by Samuel G. D. Williams. <http://www.codeotaku.com>
4
- #
5
- # Permission is hereby granted, free of charge, to any person obtaining a copy
6
- # of this software and associated documentation files (the "Software"), to deal
7
- # in the Software without restriction, including without limitation the rights
8
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- # copies of the Software, and to permit persons to whom the Software is
10
- # furnished to do so, subject to the following conditions:
11
- #
12
- # The above copyright notice and this permission notice shall be included in
13
- # all copies or substantial portions of the Software.
14
- #
15
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
- # THE SOFTWARE.
3
+ # Released under the MIT License.
4
+ # Copyright, 2019-2023, by Samuel Williams.
22
5
 
23
6
  require_relative 'body/buffered'
24
7
  require_relative 'body/reader'
@@ -50,6 +33,10 @@ module Protocol
50
33
  @status == 100
51
34
  end
52
35
 
36
+ def ok?
37
+ @status == 200
38
+ end
39
+
53
40
  def success?
54
41
  @status and @status >= 200 && @status < 300
55
42
  end
@@ -78,10 +65,13 @@ module Protocol
78
65
  @status == 400
79
66
  end
80
67
 
81
- def server_failure?
68
+ def internal_server_error?
82
69
  @status == 500
83
70
  end
84
71
 
72
+ # @deprecated Use {#internal_server_error?} instead.
73
+ alias server_failure? internal_server_error?
74
+
85
75
  def self.[](status, headers = nil, body = nil, protocol = nil)
86
76
  body = Body::Buffered.wrap(body)
87
77
  headers = ::Protocol::HTTP::Headers[headers]
@@ -1,24 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright, 2018, by Samuel G. D. Williams. <http://www.codeotaku.com>
4
- #
5
- # Permission is hereby granted, free of charge, to any person obtaining a copy
6
- # of this software and associated documentation files (the "Software"), to deal
7
- # in the Software without restriction, including without limitation the rights
8
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- # copies of the Software, and to permit persons to whom the Software is
10
- # furnished to do so, subject to the following conditions:
11
- #
12
- # The above copyright notice and this permission notice shall be included in
13
- # all copies or substantial portions of the Software.
14
- #
15
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
- # THE SOFTWARE.
3
+ # Released under the MIT License.
4
+ # Copyright, 2019-2023, by Samuel Williams.
5
+ # Copyright, 2022, by Herrick Fang.
22
6
 
23
7
  module Protocol
24
8
  module HTTP
@@ -76,7 +60,7 @@ module Protocol
76
60
  string.split('&') do |assignment|
77
61
  key, value = assignment.split('=', 2)
78
62
 
79
- yield unescape(key), unescape(value)
63
+ yield unescape(key), value.nil? ? value : unescape(value)
80
64
  end
81
65
  end
82
66
 
@@ -1,27 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright, 2018, by Samuel G. D. Williams. <http://www.codeotaku.com>
4
- #
5
- # Permission is hereby granted, free of charge, to any person obtaining a copy
6
- # of this software and associated documentation files (the "Software"), to deal
7
- # in the Software without restriction, including without limitation the rights
8
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- # copies of the Software, and to permit persons to whom the Software is
10
- # furnished to do so, subject to the following conditions:
11
- #
12
- # The above copyright notice and this permission notice shall be included in
13
- # all copies or substantial portions of the Software.
14
- #
15
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
- # THE SOFTWARE.
3
+ # Released under the MIT License.
4
+ # Copyright, 2018-2023, by Samuel Williams.
22
5
 
23
6
  module Protocol
24
7
  module HTTP
25
- VERSION = "0.23.12"
8
+ VERSION = "0.24.1"
26
9
  end
27
10
  end
data/lib/protocol/http.rb CHANGED
@@ -1,23 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- # Copyright, 2018, by Samuel G. D. Williams. <http://www.codeotaku.com>
4
- #
5
- # Permission is hereby granted, free of charge, to any person obtaining a copy
6
- # of this software and associated documentation files (the "Software"), to deal
7
- # in the Software without restriction, including without limitation the rights
8
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- # copies of the Software, and to permit persons to whom the Software is
10
- # furnished to do so, subject to the following conditions:
11
- #
12
- # The above copyright notice and this permission notice shall be included in
13
- # all copies or substantial portions of the Software.
14
- #
15
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
- # THE SOFTWARE.
3
+ # Released under the MIT License.
4
+ # Copyright, 2018-2023, by Samuel Williams.
22
5
 
23
6
  require_relative "http/version"
data/license.md ADDED
@@ -0,0 +1,27 @@
1
+ # MIT License
2
+
3
+ Copyright, 2018-2023, by Samuel Williams.
4
+ Copyright, 2019, by Yuta Iwama.
5
+ Copyright, 2020, by Olle Jonsson.
6
+ Copyright, 2020, by Bryan Powell.
7
+ Copyright, 2020, by Bruno Sutic.
8
+ Copyright, 2022, by Herrick Fang.
9
+ Copyright, 2022, by Dan Olson.
10
+
11
+ Permission is hereby granted, free of charge, to any person obtaining a copy
12
+ of this software and associated documentation files (the "Software"), to deal
13
+ in the Software without restriction, including without limitation the rights
14
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
15
+ copies of the Software, and to permit persons to whom the Software is
16
+ furnished to do so, subject to the following conditions:
17
+
18
+ The above copyright notice and this permission notice shall be included in all
19
+ copies or substantial portions of the Software.
20
+
21
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
22
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
23
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
24
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
25
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
26
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
27
+ SOFTWARE.
data/readme.md ADDED
@@ -0,0 +1,32 @@
1
+ # Protocol::HTTP
2
+
3
+ Provides abstractions for working with the HTTP protocol.
4
+
5
+ [![Development Status](https://github.com/socketry/protocol-http/workflows/Test/badge.svg)](https://github.com/socketry/protocol-http/actions?workflow=Test)
6
+
7
+ ## Features
8
+
9
+ - General abstractions for HTTP requests and responses.
10
+ - Symmetrical interfaces for client and server.
11
+ - Light-weight middlewar model for building applications.
12
+
13
+ ## Usage
14
+
15
+ Please see the [project documentation](https://socketry.github.io/protocol-http).
16
+
17
+ ## Contributing
18
+
19
+ We welcome contributions to this project.
20
+
21
+ 1. Fork it.
22
+ 2. Create your feature branch (`git checkout -b my-new-feature`).
23
+ 3. Commit your changes (`git commit -am 'Add some feature'`).
24
+ 4. Push to the branch (`git push origin my-new-feature`).
25
+ 5. Create new Pull Request.
26
+
27
+ ## See Also
28
+
29
+ - [protocol-http1](https://github.com/socketry/protocol-http1) — HTTP/1 client/server implementation using this interface.
30
+ - [protocol-http2](https://github.com/socketry/protocol-http2) — HTTP/2 client/server implementation using this interface.
31
+ - [async-http](https://github.com/socketry/async-http) — Asynchronous HTTP client and server, supporting multiple HTTP protocols & TLS.
32
+ - [async-websocket](https://github.com/socketry/async-websocket) — Asynchronous client and server WebSockets.
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,12 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: protocol-http
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.23.12
4
+ version: 0.24.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Samuel Williams
8
+ - Herrick Fang
8
9
  - Bruno Sutic
9
10
  - Bryan Powell
11
+ - Dan Olson
10
12
  - Olle Jonsson
11
13
  - Yuta Iwama
12
14
  autorequire:
@@ -41,7 +43,7 @@ cert_chain:
41
43
  Q2K9NVun/S785AP05vKkXZEFYxqG6EW012U4oLcFl5MySFajYXRYbuUpH6AY+HP8
42
44
  voD0MPg1DssDLKwXyt1eKD/+Fq0bFWhwVM/1XiAXL7lyYUyOq24KHgQ2Csg=
43
45
  -----END CERTIFICATE-----
44
- date: 2022-08-31 00:00:00.000000000 Z
46
+ date: 2023-02-10 00:00:00.000000000 Z
45
47
  dependencies:
46
48
  - !ruby/object:Gem::Dependency
47
49
  name: bundler
@@ -72,7 +74,7 @@ dependencies:
72
74
  - !ruby/object:Gem::Version
73
75
  version: '0'
74
76
  - !ruby/object:Gem::Dependency
75
- name: rspec
77
+ name: sus
76
78
  requirement: !ruby/object:Gem::Requirement
77
79
  requirements:
78
80
  - - ">="
@@ -91,6 +93,7 @@ executables: []
91
93
  extensions: []
92
94
  extra_rdoc_files: []
93
95
  files:
96
+ - design.md
94
97
  - lib/protocol/http.rb
95
98
  - lib/protocol/http/accept_encoding.rb
96
99
  - lib/protocol/http/body/buffered.rb
@@ -126,6 +129,8 @@ files:
126
129
  - lib/protocol/http/response.rb
127
130
  - lib/protocol/http/url.rb
128
131
  - lib/protocol/http/version.rb
132
+ - license.md
133
+ - readme.md
129
134
  homepage: https://github.com/socketry/protocol-http
130
135
  licenses:
131
136
  - MIT
@@ -145,7 +150,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
145
150
  - !ruby/object:Gem::Version
146
151
  version: '0'
147
152
  requirements: []
148
- rubygems_version: 3.3.7
153
+ rubygems_version: 3.4.6
149
154
  signing_key:
150
155
  specification_version: 4
151
156
  summary: Provides abstractions to handle HTTP protocols.
metadata.gz.sig CHANGED
Binary file