protocol-http 0.69.0 → 0.70.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: e15c95aaaa592e283652205e025ad4473e3f082865506604799bb8eaadf06368
4
- data.tar.gz: 10b0bf633c92acbec2fb96a70e5693060cab025e2df7ea45aaad410ba9c7afad
3
+ metadata.gz: 0bb8c2ea5ebb91d57bce473ec02b7cde1a0ca205194f7d60776114ec385abe09
4
+ data.tar.gz: 2c5bfedf8006d995f3959fe7dcf7c81b720633bccc44b05e80e1fd227a6002b1
5
5
  SHA512:
6
- metadata.gz: 99165410a3df8b9efef707e17e1ea31befa3510a65c111a77d17270ffb9167f15d36d6bc64512ee2d7aea2ff3cf5087379e7826ce54595087f89d227eb42f9b6
7
- data.tar.gz: 297e0e29550b333cfa5f35005263e9762ff8afc64c6ca9e1f76ca1fcfb0c0b9ea3a7364f81f8349aced4b9aa018d7892b5362863896d0827f0d4daec9fd0c648
6
+ metadata.gz: d42efaceae6b232ddd02d0d07dbe1a710da7e68315664c58b0e691fb47d195d6bd13ac8caeb9fda0e7a17c994e9aceb8c3811d40e6cea71eeb34492db7cc0598
7
+ data.tar.gz: be0a550a6038da525c836c4cd1219b4587a3fe9731c9e399c5c1b5a5cdd7fe633e8b9d5322e0aad0c4a4b39c0ca4122052fd5e7362afbf9ceddd72bb0de1a6c1
checksums.yaml.gz.sig CHANGED
Binary file
@@ -107,6 +107,15 @@ module Protocol
107
107
  end
108
108
  end
109
109
 
110
+ # Parse the `accept` header and order media ranges by preference.
111
+ #
112
+ # Media ranges with equal quality factors retain their original relative order.
113
+ #
114
+ # @returns [Array(MediaRange)] the preferred media ranges.
115
+ def preferred_media_ranges
116
+ sort_by_quality_factor(media_ranges)
117
+ end
118
+
110
119
  private
111
120
 
112
121
  def parse_media_range(value)
@@ -47,6 +47,15 @@ module Protocol
47
47
  end
48
48
  end
49
49
  end
50
+
51
+ # Parse the `accept-charset` header and order character sets by preference.
52
+ #
53
+ # Character sets with equal quality factors retain their original relative order.
54
+ #
55
+ # @returns [Array(Charset)] the preferred character sets.
56
+ def preferred_charsets
57
+ sort_by_quality_factor(charsets)
58
+ end
50
59
  end
51
60
  end
52
61
  end
@@ -50,6 +50,15 @@ module Protocol
50
50
  end
51
51
  end
52
52
  end
53
+
54
+ # Parse the `accept-encoding` header and order encodings by preference.
55
+ #
56
+ # Encodings with equal quality factors retain their original relative order.
57
+ #
58
+ # @returns [Array(Encoding)] the preferred encodings.
59
+ def preferred_encodings
60
+ sort_by_quality_factor(encodings)
61
+ end
53
62
  end
54
63
  end
55
64
  end
@@ -53,6 +53,15 @@ module Protocol
53
53
  end
54
54
  end
55
55
  end
56
+
57
+ # Parse the `accept-language` header and order languages by preference.
58
+ #
59
+ # Languages with equal quality factors retain their original relative order.
60
+ #
61
+ # @returns [Array(Language)] the preferred languages.
62
+ def preferred_languages
63
+ sort_by_quality_factor(languages)
64
+ end
56
65
  end
57
66
  end
58
67
  end
@@ -77,6 +77,14 @@ module Protocol
77
77
  end
78
78
 
79
79
  protected
80
+ # Order weighted values by descending quality while preserving their relative order.
81
+ # @parameter values [Enumerable] The values which respond to `#quality_factor`.
82
+ # @returns [Array] The ordered values.
83
+ def sort_by_quality_factor(values)
84
+ values.sort_by.with_index do |value, index|
85
+ [-value.quality_factor, index]
86
+ end
87
+ end
80
88
 
81
89
  def reverse_find(&block)
82
90
  reverse_each do |value|
@@ -113,6 +113,15 @@ module Protocol
113
113
  end
114
114
  end
115
115
 
116
+ # Parse the `te` header and order transfer codings by preference.
117
+ #
118
+ # Transfer codings with equal quality factors retain their original relative order.
119
+ #
120
+ # @returns [Array(TransferCoding)] the preferred transfer codings.
121
+ def preferred_transfer_codings
122
+ sort_by_quality_factor(transfer_codings)
123
+ end
124
+
116
125
  # @returns [Boolean] whether the `chunked` encoding is accepted.
117
126
  def chunked?
118
127
  self.any?{|value| value.start_with?(CHUNKED)}
@@ -5,6 +5,6 @@
5
5
 
6
6
  module Protocol
7
7
  module HTTP
8
- VERSION = "0.69.0"
8
+ VERSION = "0.70.0"
9
9
  end
10
10
  end
data/readme.md CHANGED
@@ -30,6 +30,10 @@ Please see the [project documentation](https://socketry.github.io/protocol-http/
30
30
 
31
31
  Please see the [project releases](https://socketry.github.io/protocol-http/releases/index) for all releases.
32
32
 
33
+ ### v0.70.0
34
+
35
+ - Add stable preference ordering for weighted `Accept`, `Accept-Charset`, `Accept-Encoding`, `Accept-Language`, and `TE` values.
36
+
33
37
  ### v0.69.0
34
38
 
35
39
  - Add `Protocol::HTTP::Body::Readable#to_io` for obtaining an IO-compatible stream adapter.
@@ -68,10 +72,6 @@ Please see the [project releases](https://socketry.github.io/protocol-http/relea
68
72
 
69
73
  - Introduce `Protocol::HTTP::RefusedError` for indicating a stream or request was refused before processing and can be safely retried. `RequestRefusedError` is provided as an alias for backwards compatibility.
70
74
 
71
- ### v0.60.0
72
-
73
- - Expose `Protocol::HTTP::Body::Writable#count` attribute to provide access to the number of chunks written to the body.
74
-
75
75
  ## See Also
76
76
 
77
77
  - [protocol-http1](https://github.com/socketry/protocol-http1) — HTTP/1 client/server implementation using this
data/releases.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # Releases
2
2
 
3
+ ## v0.70.0
4
+
5
+ - Add stable preference ordering for weighted `Accept`, `Accept-Charset`, `Accept-Encoding`, `Accept-Language`, and `TE` values.
6
+
3
7
  ## v0.69.0
4
8
 
5
9
  - Add `Protocol::HTTP::Body::Readable#to_io` for obtaining an IO-compatible stream adapter.
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.69.0
4
+ version: 0.70.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Samuel Williams
metadata.gz.sig CHANGED
Binary file