Class: BerkeleyLibrary::Util::URIs::Requester

Inherits:
Object
  • Object
show all
Extended by:
ClassMethods
Includes:
Logging
Defined in:
lib/berkeley_library/util/uris/requester.rb,
lib/berkeley_library/util/uris/requester/class_methods.rb

Defined Under Namespace

Modules: ClassMethods

Constant Summary collapse

SUPPORTED_METHODS =

Constants

%i[get head].freeze
RETRY_HEADER =
:retry_after
RETRY_STATUSES =
[429, 503].freeze
MAX_RETRY_DELAY_SECONDS =
10
MAX_RETRIES =
3
DEFAULT_TIMEOUT_SECONDS =
10

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from ClassMethods

get, get_response, head, head_response

Constructor Details

#initialize(method, url, params: {}, headers: {}, log: true, max_retries: MAX_RETRIES, max_retry_delay: MAX_RETRY_DELAY_SECONDS, timeout: DEFAULT_TIMEOUT_SECONDS) ⇒ Requester

Initializes a new Requester.

rubocop:disable Metrics/ParameterLists

Parameters:

  • method (:get, :head)

    the HTTP method to use

  • url (String, URI)

    the URL or URI to request

  • params (Hash) (defaults to: {})

    the query parameters to add to the URI. (Note that the URI may already include query parameters.)

  • headers (Hash) (defaults to: {})

    the request headers.

  • log (Boolean) (defaults to: true)

    whether to log each request URL and response code

  • max_retries (Integer) (defaults to: MAX_RETRIES)

    the maximum number of times to retry after a 429 or 503 with Retry-After

  • max_retry_delay (Integer) (defaults to: MAX_RETRY_DELAY_SECONDS)

    the maximum retry delay (in seconds) to accept in a Retry-After header

  • timeout (Integer) (defaults to: DEFAULT_TIMEOUT_SECONDS)

    the request timeout in seconds (RestClient will use this to set both open and read timeouts)

Raises:

  • URI::InvalidURIError if the specified URL is invalid



45
46
47
48
49
50
51
52
53
54
55
56
57
# File 'lib/berkeley_library/util/uris/requester.rb', line 45

def initialize(method, url, params: {}, headers: {}, log: true, max_retries: MAX_RETRIES, max_retry_delay: MAX_RETRY_DELAY_SECONDS,
               timeout: DEFAULT_TIMEOUT_SECONDS)
  raise ArgumentError, "#{method} not supported" unless SUPPORTED_METHODS.include?(method)
  raise ArgumentError, 'url cannot be nil' unless (uri = Validator.uri_or_nil(url))

  @method = method
  @url_str = url_str_with_params(uri, params)
  @headers = headers
  @log = log
  @max_retries = max_retries
  @max_retry_delay = max_retry_delay
  @timeout = timeout
end

Instance Attribute Details

#headersObject (readonly)


Attributes



28
29
30
# File 'lib/berkeley_library/util/uris/requester.rb', line 28

def headers
  @headers
end

#logObject (readonly)


Attributes



28
29
30
# File 'lib/berkeley_library/util/uris/requester.rb', line 28

def log
  @log
end

#max_retriesObject (readonly)


Attributes



28
29
30
# File 'lib/berkeley_library/util/uris/requester.rb', line 28

def max_retries
  @max_retries
end

#max_retry_delayObject (readonly)


Attributes



28
29
30
# File 'lib/berkeley_library/util/uris/requester.rb', line 28

def max_retry_delay
  @max_retry_delay
end

#methodObject (readonly)


Attributes



28
29
30
# File 'lib/berkeley_library/util/uris/requester.rb', line 28

def method
  @method
end

#timeoutObject (readonly)


Attributes



28
29
30
# File 'lib/berkeley_library/util/uris/requester.rb', line 28

def timeout
  @timeout
end

#url_strObject (readonly)


Attributes



28
29
30
# File 'lib/berkeley_library/util/uris/requester.rb', line 28

def url_str
  @url_str
end

Instance Method Details

#make_requestRestClient::Response

Returns:

  • (RestClient::Response)


65
66
67
68
69
70
71
72
# File 'lib/berkeley_library/util/uris/requester.rb', line 65

def make_request
  execute_request.tap do |resp|
    log_response(resp)
  end
rescue RestClient::Exception => e
  log_response(e.response)
  raise
end