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