faraday-retry 2.1.0 → 2.2.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: c2b88675fec154db2d70b835b98124879b77dbcd283b898fea74fe88c1a75a4b
4
- data.tar.gz: 57eefe94dd39d192dff652e90cfadda2ce06d244a3a20e849dd9f3df6a88ffb4
3
+ metadata.gz: f4c985b60e619c7a2161b8643fda86adcd4927847a66d903bbc22a32ed851d13
4
+ data.tar.gz: 010d8a002a7310f82c44395344cc81cb3f8acfe9e53ca8aae8ae84cd3b66d90a
5
5
  SHA512:
6
- metadata.gz: de85932e530b33168b83399f0135fd862071c10318faaaef324935c3e51bc1914dd9361c68a5c2a6d3a4fc81e9f0193b928a4fe65c2dbc34826998573465af86
7
- data.tar.gz: f5e12ca382154fac0fbff872f9f906a62c0a990b06226363c701fa52d05ee927d23b0358f005e6de974e7fad938944beb2621413419b48a5d43b29e4b3180af8
6
+ metadata.gz: b6dc78fe8c3b3ccc189c086271eb646e06f6e598a0a2b311ce3f0831321ba8f00b01d24be1c29521f7bbef5367eb17c43be7f6dfaa6402f0ec9cf206483f8794
7
+ data.tar.gz: 6338884c1806a7d06f33457db3939d71aaf761c9cc8c427a14c68257600d0601ff6765dde9b061254fd5af8f4ff77315d018a8d42d5326842fd0d26d0e52219f
data/CHANGELOG.md CHANGED
@@ -1,14 +1,14 @@
1
1
  # Changelog
2
2
 
3
- ## v2.1.1 (2023-02-17)
3
+ ## v2.2.0 (2023-06-01)
4
4
 
5
- ### Changed
5
+ * Support new `header_parser_block` option. [PR #28](https://github.com/lostisland/faraday-retry/pull/28). Thanks, [@zavan]!
6
6
 
7
- * Support for custom RateLimit headers. [PR #13](https://github.com/lostisland/faraday-retry/pull/13). Thanks, [@brookemckim]!
7
+ ## v2.1.0 (2023-03-03)
8
8
 
9
- ## v2.1.0 (2023-02-17)
9
+ * Support for custom RateLimit headers. [PR #13](https://github.com/lostisland/faraday-retry/pull/13). Thanks, [@brookemckim]!
10
10
 
11
- Invalid release, use v2.1.1.
11
+ v2.1.1 (2023-02-17) is a spurious not-released version that you may have seen mentioned in this CHANGELOG.
12
12
 
13
13
  ## v2.0.0 (2022-06-08)
14
14
 
@@ -33,3 +33,4 @@ This release consists of the same middleware that was previously bundled with Fa
33
33
 
34
34
  [@maxprokopiev]: https://github.com/maxprokopiev
35
35
  [@brookemckim]: https://github.com/brookemckim
36
+ [@zavan]: https://github.com/zavan
data/README.md CHANGED
@@ -111,13 +111,14 @@ retry_options = {
111
111
  }
112
112
  ```
113
113
 
114
- If you are working with an API which does not comply with the Rate Limit RFC you can specify custom headers to be used for retry and reset.
114
+ If you are working with an API which does not comply with the Rate Limit RFC you can specify custom headers to be used for retry and reset, as well as a block to parse the headers:
115
115
 
116
116
  ```ruby
117
117
  retry_options = {
118
118
  retry_statuses: [429],
119
119
  rate_limit_retry_header: 'x-rate-limit-retry-after',
120
- rate_limit_reset_header: 'x-rate-limit-reset'
120
+ rate_limit_reset_header: 'x-rate-limit-reset',
121
+ header_parser_block: ->(value) { Time.at(value.to_i).utc - Time.now.utc }
121
122
  }
122
123
  ```
123
124
 
@@ -27,7 +27,7 @@ module Faraday
27
27
  :backoff_factor, :exceptions,
28
28
  :methods, :retry_if, :retry_block,
29
29
  :retry_statuses, :rate_limit_retry_header,
30
- :rate_limit_reset_header)
30
+ :rate_limit_reset_header, :header_parser_block)
31
31
 
32
32
  DEFAULT_CHECK = ->(_env, _exception) { false }
33
33
 
@@ -120,6 +120,10 @@ module Faraday
120
120
  # codes or a single Integer value that determines whether to raise
121
121
  # a Faraday::RetriableResponse exception based on the HTTP status code
122
122
  # of an HTTP response.
123
+ # @option options [Block] :header_parser_block block that will receive
124
+ # the the value of the retry header and should return the number of
125
+ # seconds to wait before retrying the request. This is useful if the
126
+ # value of the header is not a number of seconds or a RFC 2822 formatted date.
123
127
  def initialize(app, options = nil)
124
128
  super(app)
125
129
  @options = Options.from(options)
@@ -244,12 +248,16 @@ module Faraday
244
248
 
245
249
  retry_after_value = env[:response_headers][header]
246
250
 
247
- # Try to parse date from the header value
248
- begin
249
- datetime = DateTime.rfc2822(retry_after_value)
250
- datetime.to_time - Time.now.utc
251
- rescue ArgumentError
252
- retry_after_value.to_f
251
+ if @options.header_parser_block
252
+ @options.header_parser_block.call(retry_after_value)
253
+ else
254
+ # Try to parse date from the header value
255
+ begin
256
+ datetime = DateTime.rfc2822(retry_after_value)
257
+ datetime.to_time - Time.now.utc
258
+ rescue ArgumentError
259
+ retry_after_value.to_f
260
+ end
253
261
  end
254
262
  end
255
263
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Faraday
4
4
  module Retry
5
- VERSION = '2.1.0'
5
+ VERSION = '2.2.0'
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: faraday-retry
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.0
4
+ version: 2.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mattia Giuffrida
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-03-03 00:00:00.000000000 Z
11
+ date: 2023-06-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -157,8 +157,8 @@ licenses:
157
157
  - MIT
158
158
  metadata:
159
159
  bug_tracker_uri: https://github.com/lostisland/faraday-retry/issues
160
- changelog_uri: https://github.com/lostisland/faraday-retry/blob/v2.1.0/CHANGELOG.md
161
- documentation_uri: http://www.rubydoc.info/gems/faraday-retry/2.1.0
160
+ changelog_uri: https://github.com/lostisland/faraday-retry/blob/v2.2.0/CHANGELOG.md
161
+ documentation_uri: http://www.rubydoc.info/gems/faraday-retry/2.2.0
162
162
  homepage_uri: https://github.com/lostisland/faraday-retry
163
163
  source_code_uri: https://github.com/lostisland/faraday-retry
164
164
  post_install_message: