Module: RDStation::RetryableRequest

Included in:
Contacts, Events, Fields, Webhooks
Defined in:
lib/rdstation/retryable_request.rb

Constant Summary collapse

MAX_RETRIES =
1

Instance Method Summary collapse

Instance Method Details

#refresh_access_token(authorization) ⇒ Object



27
28
29
30
31
32
33
# File 'lib/rdstation/retryable_request.rb', line 27

def refresh_access_token(authorization)
  client = RDStation::Authentication.new
  response = client.update_access_token(authorization.refresh_token)
  authorization.access_token = response['access_token']
  authorization.access_token_expires_in = response['expires_in']
  RDStation.configuration&.access_token_refresh_callback&.call(authorization)
end

#retry_possible?(authorization) ⇒ Boolean

Returns:

  • (Boolean)


19
20
21
22
23
24
25
# File 'lib/rdstation/retryable_request.rb', line 19

def retry_possible?(authorization)
  [
    RDStation.configuration&.client_id,
    RDStation.configuration&.client_secret,
    authorization.refresh_token
  ].all?
end

#retryable_request(authorization) ⇒ Object



6
7
8
9
10
11
12
13
14
15
16
17
# File 'lib/rdstation/retryable_request.rb', line 6

def retryable_request(authorization)
  retries = 0
  begin
    yield authorization
  rescue ::RDStation::Error::ExpiredAccessToken => e
    raise if !retry_possible?(authorization) || retries >= MAX_RETRIES

    retries += 1
    refresh_access_token(authorization)
    retry
  end
end