protocol-http 0.47.1 → 0.49.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: d8281f44eb94360f117cba9ef4770386d57b72049ec2200e45041f7b93193147
4
- data.tar.gz: 0e93ed313a1a91971568b575b58db52857f15da6a92fe8764294f2b6ef2335c6
3
+ metadata.gz: f32acdbabe7e68c2dac1c6ceb3f697936a6000b23f884e91268578594d710af9
4
+ data.tar.gz: 711a823f045bd93c1de05331937c05847ab37de5765f309689d9fcfa9c4d13d2
5
5
  SHA512:
6
- metadata.gz: 4f5765e41ef7706b20f8c82812099dc5e79fa6f5c9036332688e5dde9ea0a41a52d44a2442aa33d3514f977939f70c32b40fa858179d4bada70df5b70227e7ab
7
- data.tar.gz: 8835f1c4351794d80db3c917b374648a2090c89619b9bd9deb556955a86eb230118814930d2b8d363838b49f0d2a75d7cee0f8f91bbc2393146cc8cecc9c4f68
6
+ metadata.gz: a6f90cc72dc0262c7555cdc9cb06b04869ec2d1c161a4f394d339e509b2c940f2b0b28150054c7509a3b54b829442d44838d3ff1bab2a6f849d01c269d462b08
7
+ data.tar.gz: 75cc72a22d04106c14e74df1aab2cb48343eb5e9b7032fd13b0671bd15a02f8b9aeb7d9963141d0c078ad070c49923c485e4537363fa31b2d646d707afceddc3
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, 2019-2023, by Samuel Williams.
4
+ # Copyright, 2019-2025, by Samuel Williams.
5
5
 
6
6
  require_relative "middleware"
7
7
 
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # Released under the MIT License.
4
- # Copyright, 2020-2023, by Samuel Williams.
4
+ # Copyright, 2020-2025, by Samuel Williams.
5
5
 
6
6
  require_relative "readable"
7
7
 
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # Released under the MIT License.
4
- # Copyright, 2019-2023, by Samuel Williams.
4
+ # Copyright, 2019-2025, by Samuel Williams.
5
5
 
6
6
  require_relative "middleware"
7
7
 
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # Released under the MIT License.
4
- # Copyright, 2019-2023, by Samuel Williams.
4
+ # Copyright, 2019-2025, by Samuel Williams.
5
5
  # Copyright, 2022, by Herrick Fang.
6
6
 
7
7
  require_relative "url"
@@ -0,0 +1,128 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Released under the MIT License.
4
+ # Copyright, 2025, by Samuel Williams.
5
+
6
+ require_relative "split"
7
+ require_relative "quoted_string"
8
+ require_relative "../error"
9
+
10
+ module Protocol
11
+ module HTTP
12
+ module Header
13
+ # The `accept-content-type` header represents a list of content-types that the client can accept.
14
+ class Accept < Array
15
+ # Regular expression used to split values on commas, with optional surrounding whitespace, taking into account quoted strings.
16
+ SEPARATOR = /
17
+ (?: # Start non-capturing group
18
+ "[^"\\]*" # Match quoted strings (no escaping of quotes within)
19
+ | # OR
20
+ [^,"]+ # Match non-quoted strings until a comma or quote
21
+ )+
22
+ (?=,|\z) # Match until a comma or end of string
23
+ /x
24
+
25
+ ParseError = Class.new(Error)
26
+
27
+ MEDIA_RANGE = /\A(?<type>#{TOKEN})\/(?<subtype>#{TOKEN})(?<parameters>.*)\z/
28
+
29
+ PARAMETER = /\s*;\s*(?<key>#{TOKEN})=((?<value>#{TOKEN})|(?<quoted_value>#{QUOTED_STRING}))/
30
+
31
+ # A single entry in the Accept: header, which includes a mime type and associated parameters. A media range can include wild cards, but a media type is a specific type and subtype.
32
+ MediaRange = Struct.new(:type, :subtype, :parameters) do
33
+ # Create a new media range.
34
+ #
35
+ # @parameter type [String] the type of the media range.
36
+ # @parameter subtype [String] the subtype of the media range.
37
+ # @parameter parameters [Hash] the parameters associated with the media range.
38
+ def initialize(type, subtype = "*", parameters = {})
39
+ super(type, subtype, parameters)
40
+ end
41
+
42
+ # Compare the media range with another media range or a string, based on the quality factor.
43
+ def <=> other
44
+ other.quality_factor <=> self.quality_factor
45
+ end
46
+
47
+ private def parameters_string
48
+ return "" if parameters == nil or parameters.empty?
49
+
50
+ parameters.collect do |key, value|
51
+ ";#{key.to_s}=#{QuotedString.quote(value.to_s)}"
52
+ end.join
53
+ end
54
+
55
+ # The string representation of the media range, including the type, subtype, and any parameters.
56
+ def to_s
57
+ "#{type}/#{subtype}#{parameters_string}"
58
+ end
59
+
60
+ alias to_str to_s
61
+
62
+ # The quality factor associated with the media range, which is used to determine the order of preference.
63
+ #
64
+ # @returns [Float] the quality factor, which defaults to 1.0 if not specified.
65
+ def quality_factor
66
+ parameters.fetch("q", 1.0).to_f
67
+ end
68
+ end
69
+
70
+ # Parse the `accept` header value into a list of content types.
71
+ #
72
+ # @parameter value [String] the value of the header.
73
+ def initialize(value = nil)
74
+ if value
75
+ super(value.scan(SEPARATOR).map(&:strip))
76
+ end
77
+ end
78
+
79
+ # Adds one or more comma-separated values to the header.
80
+ #
81
+ # The input string is split into distinct entries and appended to the array.
82
+ #
83
+ # @parameter value [String] the value or values to add, separated by commas.
84
+ def << (value)
85
+ self.concat(value.scan(SEPARATOR).map(&:strip))
86
+ end
87
+
88
+ # Serializes the stored values into a comma-separated string.
89
+ #
90
+ # @returns [String] the serialized representation of the header values.
91
+ def to_s
92
+ join(",")
93
+ end
94
+
95
+ # Parse the `accept` header.
96
+ #
97
+ # @returns [Array(Charset)] the list of content types and their associated parameters.
98
+ def media_ranges
99
+ self.map do |value|
100
+ self.parse_media_range(value)
101
+ end
102
+ end
103
+
104
+ private
105
+
106
+ def parse_media_range(value)
107
+ if match = value.match(MEDIA_RANGE)
108
+ type = match[:type]
109
+ subtype = match[:subtype]
110
+ parameters = {}
111
+
112
+ match[:parameters].scan(PARAMETER) do |key, value, quoted_value|
113
+ if quoted_value
114
+ value = QuotedString.unquote(quoted_value)
115
+ end
116
+
117
+ parameters[key] = value
118
+ end
119
+
120
+ return MediaRange.new(type, subtype, parameters)
121
+ else
122
+ raise ParseError, "Invalid media type: #{value.inspect}"
123
+ end
124
+ end
125
+ end
126
+ end
127
+ end
128
+ end
@@ -0,0 +1,45 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Released under the MIT License.
4
+ # Copyright, 2025, by Samuel Williams.
5
+
6
+ require_relative "split"
7
+ require_relative "quoted_string"
8
+ require_relative "../error"
9
+
10
+ module Protocol
11
+ module HTTP
12
+ module Header
13
+ # The `accept-charset` header represents a list of character sets that the client can accept.
14
+ class AcceptCharset < Split
15
+ ParseError = Class.new(Error)
16
+
17
+ # https://tools.ietf.org/html/rfc7231#section-5.3.3
18
+ CHARSET = /\A(?<name>#{TOKEN})(;q=(?<q>#{QVALUE}))?\z/
19
+
20
+ Charset = Struct.new(:name, :q) do
21
+ def quality_factor
22
+ (q || 1.0).to_f
23
+ end
24
+
25
+ def <=> other
26
+ other.quality_factor <=> self.quality_factor
27
+ end
28
+ end
29
+
30
+ # Parse the `accept-charset` header value into a list of character sets.
31
+ #
32
+ # @returns [Array(Charset)] the list of character sets and their associated quality factors.
33
+ def charsets
34
+ self.map do |value|
35
+ if match = value.match(CHARSET)
36
+ Charset.new(match[:name], match[:q])
37
+ else
38
+ raise ParseError.new("Could not parse character set: #{value.inspect}")
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,48 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Released under the MIT License.
4
+ # Copyright, 2025, by Samuel Williams.
5
+
6
+ require_relative "split"
7
+ require_relative "quoted_string"
8
+ require_relative "../error"
9
+
10
+ module Protocol
11
+ module HTTP
12
+ module Header
13
+ # The `accept-encoding` header represents a list of encodings that the client can accept.
14
+ class AcceptEncoding < Split
15
+ ParseError = Class.new(Error)
16
+
17
+ # https://tools.ietf.org/html/rfc7231#section-5.3.1
18
+ QVALUE = /0(\.[0-9]{0,3})?|1(\.[0]{0,3})?/
19
+
20
+ # https://tools.ietf.org/html/rfc7231#section-5.3.4
21
+ ENCODING = /\A(?<name>#{TOKEN})(;q=(?<q>#{QVALUE}))?\z/
22
+
23
+ Encoding = Struct.new(:name, :q) do
24
+ def quality_factor
25
+ (q || 1.0).to_f
26
+ end
27
+
28
+ def <=> other
29
+ other.quality_factor <=> self.quality_factor
30
+ end
31
+ end
32
+
33
+ # Parse the `accept-encoding` header value into a list of encodings.
34
+ #
35
+ # @returns [Array(Charset)] the list of character sets and their associated quality factors.
36
+ def encodings
37
+ self.map do |value|
38
+ if match = value.match(ENCODING)
39
+ Encoding.new(match[:name], match[:q])
40
+ else
41
+ raise ParseError.new("Could not parse encoding: #{value.inspect}")
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
@@ -0,0 +1,51 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Released under the MIT License.
4
+ # Copyright, 2025, by Samuel Williams.
5
+
6
+ require_relative "split"
7
+ require_relative "quoted_string"
8
+ require_relative "../error"
9
+
10
+ module Protocol
11
+ module HTTP
12
+ module Header
13
+ # The `accept-language` header represents a list of languages that the client can accept.
14
+ class AcceptLanguage < Split
15
+ ParseError = Class.new(Error)
16
+
17
+ # https://tools.ietf.org/html/rfc3066#section-2.1
18
+ NAME = /\*|[A-Z]{1,8}(-[A-Z0-9]{1,8})*/i
19
+
20
+ # https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.9
21
+ QVALUE = /0(\.[0-9]{0,6})?|1(\.[0]{0,6})?/
22
+
23
+ # https://greenbytes.de/tech/webdav/rfc7231.html#quality.values
24
+ LANGUAGE = /\A(?<name>#{NAME})(\s*;\s*q=(?<q>#{QVALUE}))?\z/
25
+
26
+ Language = Struct.new(:name, :q) do
27
+ def quality_factor
28
+ (q || 1.0).to_f
29
+ end
30
+
31
+ def <=> other
32
+ other.quality_factor <=> self.quality_factor
33
+ end
34
+ end
35
+
36
+ # Parse the `accept-language` header value into a list of languages.
37
+ #
38
+ # @returns [Array(Charset)] the list of character sets and their associated quality factors.
39
+ def languages
40
+ self.map do |value|
41
+ if match = value.match(LANGUAGE)
42
+ Language.new(match[:name], match[:q])
43
+ else
44
+ raise ParseError.new("Could not parse language: #{value.inspect}")
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # Released under the MIT License.
4
- # Copyright, 2020-2023, by Samuel Williams.
4
+ # Copyright, 2020-2025, by Samuel Williams.
5
5
  # Copyright, 2023, by Thomas Morgan.
6
6
 
7
7
  require_relative "split"
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # Released under the MIT License.
4
- # Copyright, 2019-2024, by Samuel Williams.
4
+ # Copyright, 2019-2025, by Samuel Williams.
5
5
  # Copyright, 2024, by Thomas Morgan.
6
6
 
7
7
  require_relative "split"
@@ -53,4 +53,4 @@ module Protocol
53
53
  end
54
54
  end
55
55
  end
56
- end
56
+ end
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # Released under the MIT License.
4
- # Copyright, 2019-2023, by Samuel Williams.
4
+ # Copyright, 2019-2025, by Samuel Williams.
5
5
 
6
6
  require_relative "multiple"
7
7
  require_relative "../cookie"
@@ -32,4 +32,4 @@ module Protocol
32
32
  end
33
33
  end
34
34
  end
35
- end
35
+ end
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # Released under the MIT License.
4
- # Copyright, 2020-2023, by Samuel Williams.
4
+ # Copyright, 2020-2025, by Samuel Williams.
5
5
 
6
6
  module Protocol
7
7
  module HTTP
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # Released under the MIT License.
4
- # Copyright, 2020-2023, by Samuel Williams.
4
+ # Copyright, 2020-2025, by Samuel Williams.
5
5
  # Copyright, 2023, by Thomas Morgan.
6
6
 
7
7
  require_relative "split"
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # Released under the MIT License.
4
- # Copyright, 2019-2023, by Samuel Williams.
4
+ # Copyright, 2019-2025, by Samuel Williams.
5
5
 
6
6
  module Protocol
7
7
  module HTTP
@@ -0,0 +1,49 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Released under the MIT License.
4
+ # Copyright, 2025, by Samuel Williams.
5
+
6
+ module Protocol
7
+ module HTTP
8
+ module Header
9
+ # According to https://tools.ietf.org/html/rfc7231#appendix-C
10
+ TOKEN = /[!#$%&'*+\-.^_`|~0-9A-Z]+/i
11
+
12
+ QUOTED_STRING = /"(?:.(?!(?<!\\)"))*.?"/
13
+
14
+ # https://tools.ietf.org/html/rfc7231#section-5.3.1
15
+ QVALUE = /0(\.[0-9]{0,3})?|1(\.[0]{0,3})?/
16
+
17
+ # Handling of HTTP quoted strings.
18
+ module QuotedString
19
+ # Unquote a "quoted-string" value according to <https://tools.ietf.org/html/rfc7230#section-3.2.6>. It should already match the QUOTED_STRING pattern above by the parser.
20
+ def self.unquote(value, normalize_whitespace = true)
21
+ value = value[1...-1]
22
+
23
+ value.gsub!(/\\(.)/, '\1')
24
+
25
+ if normalize_whitespace
26
+ # LWS = [CRLF] 1*( SP | HT )
27
+ value.gsub!(/[\r\n]+\s+/, " ")
28
+ end
29
+
30
+ return value
31
+ end
32
+
33
+ QUOTES_REQUIRED = /[()<>@,;:\\"\/\[\]?={} \t]/
34
+
35
+ # Quote a string for HTTP header values if required.
36
+ #
37
+ # @raises [ArgumentError] if the value contains invalid characters like control characters or newlines.
38
+ def self.quote(value, force = false)
39
+ # Check if quoting is required:
40
+ if value =~ QUOTES_REQUIRED or force
41
+ "\"#{value.gsub(/["\\]/, '\\\\\0')}\""
42
+ else
43
+ value
44
+ end
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # Released under the MIT License.
4
- # Copyright, 2019-2023, by Samuel Williams.
4
+ # Copyright, 2019-2025, by Samuel Williams.
5
5
 
6
6
  module Protocol
7
7
  module HTTP
@@ -30,7 +30,7 @@ module Protocol
30
30
  #
31
31
  # @parameter value [String] the value or values to add, separated by commas.
32
32
  def << value
33
- self.push(*value.split(COMMA))
33
+ self.concat(value.split(COMMA))
34
34
  end
35
35
 
36
36
  # Serializes the stored values into a comma-separated string.
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # Released under the MIT License.
4
- # Copyright, 2020-2023, by Samuel Williams.
4
+ # Copyright, 2020-2025, by Samuel Williams.
5
5
 
6
6
  require_relative "split"
7
7
 
@@ -28,4 +28,4 @@ module Protocol
28
28
  end
29
29
  end
30
30
  end
31
- end
31
+ end
@@ -1,10 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # Released under the MIT License.
4
- # Copyright, 2018-2024, by Samuel Williams.
4
+ # Copyright, 2018-2025, by Samuel Williams.
5
5
 
6
6
  require_relative "header/split"
7
7
  require_relative "header/multiple"
8
+
8
9
  require_relative "header/cookie"
9
10
  require_relative "header/connection"
10
11
  require_relative "header/cache_control"
@@ -15,6 +16,11 @@ require_relative "header/authorization"
15
16
  require_relative "header/date"
16
17
  require_relative "header/priority"
17
18
 
19
+ require_relative "header/accept"
20
+ require_relative "header/accept_charset"
21
+ require_relative "header/accept_encoding"
22
+ require_relative "header/accept_language"
23
+
18
24
  module Protocol
19
25
  module HTTP
20
26
  # @namespace
@@ -277,6 +283,12 @@ module Protocol
277
283
  "last-modified" => Header::Date,
278
284
  "if-modified-since" => Header::Date,
279
285
  "if-unmodified-since" => Header::Date,
286
+
287
+ # Accept headers:
288
+ "accept" => Header::Accept,
289
+ "accept-charset" => Header::AcceptCharset,
290
+ "accept-encoding" => Header::AcceptEncoding,
291
+ "accept-language" => Header::AcceptLanguage,
280
292
  }.tap{|hash| hash.default = Split}
281
293
 
282
294
  # Delete all header values for the given key, and return the merged value.
@@ -75,9 +75,9 @@ module Protocol
75
75
  end
76
76
 
77
77
  self.each do |name, method|
78
- define_method(name) do |location, *arguments, **options|
78
+ define_method(name) do |*arguments, **options|
79
79
  self.call(
80
- Request[method, location.to_s, *arguments, **options]
80
+ Request[method, *arguments, **options]
81
81
  )
82
82
  end
83
83
  end
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # Released under the MIT License.
4
- # Copyright, 2019-2023, by Samuel Williams.
4
+ # Copyright, 2019-2025, by Samuel Williams.
5
5
 
6
6
  require_relative "methods"
7
7
  require_relative "headers"
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # Released under the MIT License.
4
- # Copyright, 2017-2024, by Samuel Williams.
4
+ # Copyright, 2024-2025, by Samuel Williams.
5
5
 
6
6
  module Protocol
7
7
  module HTTP
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # Released under the MIT License.
4
- # Copyright, 2018-2023, by Samuel Williams.
4
+ # Copyright, 2018-2025, by Samuel Williams.
5
5
 
6
6
  require_relative "url"
7
7
 
@@ -124,7 +124,8 @@ module Protocol
124
124
  # @parameter path [String] The path, e.g. `"/index.html"`, `"/search?q=hello"`, etc.
125
125
  # @parameter headers [Hash] The headers, e.g. `{"accept" => "text/html"}`, etc.
126
126
  # @parameter body [String | Array(String) | Body::Readable] The body, e.g. `"Hello, World!"`, etc. See {Body::Buffered.wrap} for more information about .
127
- def self.[](method, path, _headers = nil, _body = nil, scheme: nil, authority: nil, headers: _headers, body: _body, protocol: nil, interim_response: nil)
127
+ def self.[](method, path = nil, _headers = nil, _body = nil, scheme: nil, authority: nil, headers: _headers, body: _body, protocol: nil, interim_response: nil)
128
+ path = path&.to_s
128
129
  body = Body::Buffered.wrap(body)
129
130
  headers = Headers[headers]
130
131
 
@@ -5,6 +5,6 @@
5
5
 
6
6
  module Protocol
7
7
  module HTTP
8
- VERSION = "0.47.1"
8
+ VERSION = "0.49.0"
9
9
  end
10
10
  end
data/license.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # MIT License
2
2
 
3
- Copyright, 2018-2024, by Samuel Williams.
3
+ Copyright, 2018-2025, by Samuel Williams.
4
4
  Copyright, 2019, by Yuta Iwama.
5
5
  Copyright, 2020, by Olle Jonsson.
6
6
  Copyright, 2020, by Bryan Powell.
data/readme.md CHANGED
@@ -24,6 +24,10 @@ Please see the [project documentation](https://socketry.github.io/protocol-http/
24
24
 
25
25
  Please see the [project releases](https://socketry.github.io/protocol-http/releases/index) for all releases.
26
26
 
27
+ ### v0.48.0
28
+
29
+ - Add support for parsing `accept`, `accept-charset`, `accept-encoding` and `accept-language` headers into structured values.
30
+
27
31
  ### v0.46.0
28
32
 
29
33
  - Add support for `priority:` header.
data/releases.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # Releases
2
2
 
3
+ ## v0.48.0
4
+
5
+ - Add support for parsing `accept`, `accept-charset`, `accept-encoding` and `accept-language` headers into structured values.
6
+
3
7
  ## v0.46.0
4
8
 
5
9
  - Add support for `priority:` header.
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: protocol-http
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.47.1
4
+ version: 0.49.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Samuel Williams
@@ -15,7 +15,6 @@ authors:
15
15
  - Marcelo Junior
16
16
  - Olle Jonsson
17
17
  - Yuta Iwama
18
- autorequire:
19
18
  bindir: bin
20
19
  cert_chain:
21
20
  - |
@@ -47,10 +46,8 @@ cert_chain:
47
46
  Q2K9NVun/S785AP05vKkXZEFYxqG6EW012U4oLcFl5MySFajYXRYbuUpH6AY+HP8
48
47
  voD0MPg1DssDLKwXyt1eKD/+Fq0bFWhwVM/1XiAXL7lyYUyOq24KHgQ2Csg=
49
48
  -----END CERTIFICATE-----
50
- date: 2024-12-04 00:00:00.000000000 Z
49
+ date: 2025-01-29 00:00:00.000000000 Z
51
50
  dependencies: []
52
- description:
53
- email:
54
51
  executables: []
55
52
  extensions: []
56
53
  extra_rdoc_files: []
@@ -75,6 +72,10 @@ files:
75
72
  - lib/protocol/http/content_encoding.rb
76
73
  - lib/protocol/http/cookie.rb
77
74
  - lib/protocol/http/error.rb
75
+ - lib/protocol/http/header/accept.rb
76
+ - lib/protocol/http/header/accept_charset.rb
77
+ - lib/protocol/http/header/accept_encoding.rb
78
+ - lib/protocol/http/header/accept_language.rb
78
79
  - lib/protocol/http/header/authorization.rb
79
80
  - lib/protocol/http/header/cache_control.rb
80
81
  - lib/protocol/http/header/connection.rb
@@ -84,6 +85,7 @@ files:
84
85
  - lib/protocol/http/header/etags.rb
85
86
  - lib/protocol/http/header/multiple.rb
86
87
  - lib/protocol/http/header/priority.rb
88
+ - lib/protocol/http/header/quoted_string.rb
87
89
  - lib/protocol/http/header/split.rb
88
90
  - lib/protocol/http/header/vary.rb
89
91
  - lib/protocol/http/headers.rb
@@ -105,7 +107,6 @@ licenses:
105
107
  metadata:
106
108
  documentation_uri: https://socketry.github.io/protocol-http/
107
109
  source_code_uri: https://github.com/socketry/protocol-http.git
108
- post_install_message:
109
110
  rdoc_options: []
110
111
  require_paths:
111
112
  - lib
@@ -120,8 +121,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
120
121
  - !ruby/object:Gem::Version
121
122
  version: '0'
122
123
  requirements: []
123
- rubygems_version: 3.5.22
124
- signing_key:
124
+ rubygems_version: 3.6.2
125
125
  specification_version: 4
126
126
  summary: Provides abstractions to handle HTTP protocols.
127
127
  test_files: []
metadata.gz.sig CHANGED
Binary file