Sha256: 71cdff451841b6ceb196df82d12d38ca81edfe6c9a04e048d2ded627a6191c3e

Contents?: true

Size: 1.02 KB

Versions: 3

Compression:

Stored size: 1.02 KB

Contents

# frozen_string_literal: true

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

        retries += 1
        refresh_access_token(authorization)
        retry
      end
    end

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

    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
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
rdstation-ruby-client-2.9.0 lib/rdstation/retryable_request.rb
rdstation-ruby-client-2.8.2 lib/rdstation/retryable_request.rb
rdstation-ruby-client-2.8.1 lib/rdstation/retryable_request.rb