faraday-retry 2.0.0 → 2.1.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 +4 -4
- data/CHANGELOG.md +11 -0
- data/README.md +13 -3
- data/lib/faraday/retry/middleware.rb +7 -4
- data/lib/faraday/retry/version.rb +1 -1
- metadata +4 -4
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: c2b88675fec154db2d70b835b98124879b77dbcd283b898fea74fe88c1a75a4b
         | 
| 4 | 
            +
              data.tar.gz: 57eefe94dd39d192dff652e90cfadda2ce06d244a3a20e849dd9f3df6a88ffb4
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: de85932e530b33168b83399f0135fd862071c10318faaaef324935c3e51bc1914dd9361c68a5c2a6d3a4fc81e9f0193b928a4fe65c2dbc34826998573465af86
         | 
| 7 | 
            +
              data.tar.gz: f5e12ca382154fac0fbff872f9f906a62c0a990b06226363c701fa52d05ee927d23b0358f005e6de974e7fad938944beb2621413419b48a5d43b29e4b3180af8
         | 
    
        data/CHANGELOG.md
    CHANGED
    
    | @@ -1,5 +1,15 @@ | |
| 1 1 | 
             
            # Changelog
         | 
| 2 2 |  | 
| 3 | 
            +
            ## v2.1.1 (2023-02-17)
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            ### Changed
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            * Support for custom RateLimit headers. [PR #13](https://github.com/lostisland/faraday-retry/pull/13). Thanks, [@brookemckim]!
         | 
| 8 | 
            +
             | 
| 9 | 
            +
            ## v2.1.0 (2023-02-17)
         | 
| 10 | 
            +
             | 
| 11 | 
            +
            Invalid release, use v2.1.1.
         | 
| 12 | 
            +
             | 
| 3 13 | 
             
            ## v2.0.0 (2022-06-08)
         | 
| 4 14 |  | 
| 5 15 | 
             
            ### Changed
         | 
| @@ -22,3 +32,4 @@ This release consists of the same middleware that was previously bundled with Fa | |
| 22 32 | 
             
            *  Retry middleware `retry_block` is not called if retry will not happen due to `max_interval`, https://github.com/lostisland/faraday/pull/1350
         | 
| 23 33 |  | 
| 24 34 | 
             
            [@maxprokopiev]: https://github.com/maxprokopiev
         | 
| 35 | 
            +
            [@brookemckim]: https://github.com/brookemckim
         | 
    
        data/README.md
    CHANGED
    
    | @@ -1,6 +1,6 @@ | |
| 1 1 | 
             
            # Faraday Retry
         | 
| 2 2 |  | 
| 3 | 
            -
            [](https://github.com/lostisland/faraday-retry/actions/workflows/ci.yaml)
         | 
| 4 4 | 
             
            [](https://rubygems.org/gems/faraday-retry)
         | 
| 5 5 | 
             
            [](LICENSE.md)
         | 
| 6 6 |  | 
| @@ -100,7 +100,7 @@ retry_options = { | |
| 100 100 |  | 
| 101 101 | 
             
            Some APIs, like the [Slack API](https://api.slack.com/docs/rate-limits), will inform you when you reach their API limits by replying with a response status code of `429`
         | 
| 102 102 | 
             
            and a response header of `Retry-After` containing a time in seconds. You should then only retry querying after the amount of time provided by the `Retry-After` header,
         | 
| 103 | 
            -
            otherwise you won't get a response. Other APIs communicate their rate limits via the [RateLimit-xxx](https:// | 
| 103 | 
            +
            otherwise you won't get a response. Other APIs communicate their rate limits via the [RateLimit-xxx](https://www.ietf.org/archive/id/draft-ietf-httpapi-ratelimit-headers-05.html#name-providing-ratelimit-fields) headers
         | 
| 104 104 | 
             
            where `RateLimit-Reset` behaves similarly to the `Retry-After`.
         | 
| 105 105 |  | 
| 106 106 | 
             
            You can automatically handle both headers and have Faraday pause and retry for the right amount of time by including the `429` status code in the retry statuses list:
         | 
| @@ -111,6 +111,16 @@ 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.
         | 
| 115 | 
            +
             | 
| 116 | 
            +
            ```ruby
         | 
| 117 | 
            +
            retry_options = {
         | 
| 118 | 
            +
              retry_statuses: [429],
         | 
| 119 | 
            +
              rate_limit_retry_header: 'x-rate-limit-retry-after',
         | 
| 120 | 
            +
              rate_limit_reset_header: 'x-rate-limit-reset'
         | 
| 121 | 
            +
            }
         | 
| 122 | 
            +
            ```
         | 
| 123 | 
            +
             | 
| 114 124 | 
             
            #### Specify a custom retry logic
         | 
| 115 125 |  | 
| 116 126 | 
             
            You can also specify a custom retry logic with the `retry_if` option.
         | 
| @@ -142,7 +152,7 @@ For example, you might want to keep track of the response statuses: | |
| 142 152 | 
             
            ```ruby
         | 
| 143 153 | 
             
            response_statuses = []
         | 
| 144 154 | 
             
            retry_options = {
         | 
| 145 | 
            -
              retry_block: -> (env:, options:,  | 
| 155 | 
            +
              retry_block: -> (env:, options:, retry_count:, exception:, will_retry_in:) { response_statuses << env.status }
         | 
| 146 156 | 
             
            }
         | 
| 147 157 | 
             
            ```
         | 
| 148 158 |  | 
| @@ -26,7 +26,8 @@ module Faraday | |
| 26 26 | 
             
                                                       :interval_randomness,
         | 
| 27 27 | 
             
                                                       :backoff_factor, :exceptions,
         | 
| 28 28 | 
             
                                                       :methods, :retry_if, :retry_block,
         | 
| 29 | 
            -
                                                       :retry_statuses | 
| 29 | 
            +
                                                       :retry_statuses, :rate_limit_retry_header,
         | 
| 30 | 
            +
                                                       :rate_limit_reset_header)
         | 
| 30 31 |  | 
| 31 32 | 
             
                    DEFAULT_CHECK = ->(_env, _exception) { false }
         | 
| 32 33 |  | 
| @@ -213,15 +214,17 @@ module Faraday | |
| 213 214 | 
             
                  end
         | 
| 214 215 |  | 
| 215 216 | 
             
                  # RFC for RateLimit Header Fields for HTTP:
         | 
| 216 | 
            -
                  # https:// | 
| 217 | 
            +
                  # https://www.ietf.org/archive/id/draft-ietf-httpapi-ratelimit-headers-05.html#name-fields-definition
         | 
| 217 218 | 
             
                  def calculate_rate_limit_reset(env)
         | 
| 218 | 
            -
                     | 
| 219 | 
            +
                    reset_header = @options.rate_limit_reset_header || 'RateLimit-Reset'
         | 
| 220 | 
            +
                    parse_retry_header(env, reset_header)
         | 
| 219 221 | 
             
                  end
         | 
| 220 222 |  | 
| 221 223 | 
             
                  # MDN spec for Retry-After header:
         | 
| 222 224 | 
             
                  # https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Retry-After
         | 
| 223 225 | 
             
                  def calculate_retry_after(env)
         | 
| 224 | 
            -
                     | 
| 226 | 
            +
                    retry_header = @options.rate_limit_retry_header || 'Retry-After'
         | 
| 227 | 
            +
                    parse_retry_header(env, retry_header)
         | 
| 225 228 | 
             
                  end
         | 
| 226 229 |  | 
| 227 230 | 
             
                  def calculate_retry_interval(retries)
         | 
    
        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. | 
| 4 | 
            +
              version: 2.1.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:  | 
| 11 | 
            +
            date: 2023-03-03 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. | 
| 161 | 
            -
              documentation_uri: http://www.rubydoc.info/gems/faraday-retry/2. | 
| 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
         | 
| 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: 
         |