File tree Expand file tree Collapse file tree 2 files changed +25
-0
lines changed
Expand file tree Collapse file tree 2 files changed +25
-0
lines changed Original file line number Diff line number Diff line change 99module Readwise
1010 class Client
1111 class Error < StandardError ; end
12+ class TooManyRequests < Error
13+ def initialize ( retry_after )
14+ @retry_after = retry_after
15+ end
16+
17+ def message
18+ "Try again after #{ @retry_after } seconds"
19+ end
20+ end
1221
1322 BASE_URL = "https://readwise.io/api/v2/"
1423 V3_BASE_URL = "https://readwise.io/api/v3/"
@@ -302,6 +311,11 @@ def get_readwise_request(url)
302311 http . request ( req )
303312 end
304313
314+ if res . code == "429" # Too Many Requests
315+ retry_after = Integer ( res . fetch ( "Retry-After" ) )
316+ raise TooManyRequests . new ( retry_after )
317+ end
318+
305319 raise Error , "Get request failed with status code: #{ res . code } " unless res . is_a? ( Net ::HTTPSuccess )
306320
307321 JSON . parse ( res . body )
Original file line number Diff line number Diff line change 311311 . to raise_error ( Readwise ::Client ::Error , 'Get request failed with status code: 404' )
312312 end
313313
314+ it 'raises TooManyRequests error on a 429 response' do
315+ response = double ( code : '429' , is_a? : false )
316+ allow ( response ) . to receive ( :fetch ) . with ( "Retry-After" ) . and_return ( '120' )
317+ allow ( Net ::HTTP ) . to receive ( :start ) . and_return ( response )
318+
319+ expect { subject . send ( :get_readwise_request , 'https://example.com' ) }
320+ . to raise_error ( Readwise ::Client ::TooManyRequests ) do |error |
321+ expect ( error . message ) . to eq ( 'Try again after 120 seconds' )
322+ end
323+ end
324+
314325 it 'raises error on failed POST request' do
315326 allow ( Net ::HTTP ) . to receive ( :start ) . and_return ( double ( is_a? : false ) )
316327
You can’t perform that action at this time.
0 commit comments