class Ezid::Request
A request to the EZID service.
@api private @abstract
Constants
- DELETE
- GET
HTTP methods
- POST
- PUT
- RETRIABLE_SERVER_ERRORS
- RETRIES
Attributes
http_method[RW]
path[RW]
response_class[RW]
client[R]
Public Class Methods
execute(client, *args) { |request| ... }
click to toggle source
# File lib/ezid/requests/request.rb, line 32 def execute(client, *args) request = new(client, *args) yield request if block_given? request.execute end
new(client, *args)
click to toggle source
@param client [Ezid::Client] the client
Calls superclass method
# File lib/ezid/requests/request.rb, line 47 def initialize(client, *args) @client = client super build_request set_content_type('text/plain', charset: 'UTF-8') end
short_name()
click to toggle source
# File lib/ezid/requests/request.rb, line 38 def short_name name.split('::').last.sub('Request', '') end
Public Instance Methods
authentication_required?()
click to toggle source
# File lib/ezid/requests/request.rb, line 108 def authentication_required? true end
execute()
click to toggle source
Executes the request and returns the response @return [Ezid::Response] the response
# File lib/ezid/requests/request.rb, line 55 def execute retries = 0 begin http_response = get_response_for_request if RETRIABLE_SERVER_ERRORS.include? http_response.code raise ServerError, "#{http_response.code} #{http_response.msg}" end response_class.new(http_response) rescue ServerError, UnexpectedResponseError => e if retries < RETRIES logger.error "EZID error: #{e}" retries += 1 logger.info "Retry (#{retries} of #{RETRIES}) of #{short_name} #{path} in #{config.retry_interval} seconds ..." sleep config.retry_interval retry else raise end end end
handle_response(http_response) { |response| ... }
click to toggle source
# File lib/ezid/requests/request.rb, line 116 def handle_response(http_response) response_class.new(http_response).tap do |response| yield response if block_given? end end
has_metadata?()
click to toggle source
# File lib/ezid/requests/request.rb, line 112 def has_metadata? !metadata.empty? rescue false end
path()
click to toggle source
HTTP request path @return [String] the path
# File lib/ezid/requests/request.rb, line 90 def path self.class.path end
query()
click to toggle source
HTTP request query string @return [String] the query string
# File lib/ezid/requests/request.rb, line 102 def query; end
response_class()
click to toggle source
Class to wrap Net::HTTPResponse @return [Class]
# File lib/ezid/requests/request.rb, line 96 def response_class self.class.response_class || Response end
short_name()
click to toggle source
# File lib/ezid/requests/request.rb, line 104 def short_name self.class.short_name end
uri()
click to toggle source
The request URI @return [URI] the URI
# File lib/ezid/requests/request.rb, line 84 def uri @uri ||= build_uri end
Private Instance Methods
add_authentication()
click to toggle source
Adds authentication data to the request
# File lib/ezid/requests/request.rb, line 147 def add_authentication if session.open? self['Cookie'] = session.cookie else basic_auth(user, password) end end
add_metadata()
click to toggle source
# File lib/ezid/requests/request.rb, line 155 def add_metadata self.body = metadata.to_anvl(false) end
build_request()
click to toggle source
# File lib/ezid/requests/request.rb, line 133 def build_request self.class.http_method.new(uri) end
build_uri()
click to toggle source
# File lib/ezid/requests/request.rb, line 141 def build_uri uri_klass = connection.use_ssl? ? URI::HTTPS : URI::HTTP uri_klass.build(host: host, path: path, query: query) end
get_response_for_request()
click to toggle source
# File lib/ezid/requests/request.rb, line 124 def get_response_for_request connection.start do |conn| self['Accept'] = 'text/plain' add_authentication if authentication_required? add_metadata if has_metadata? conn.request(__getobj__) end end
host()
click to toggle source
# File lib/ezid/requests/request.rb, line 137 def host connection.address end