class Europeana::Record

Interface to the Europeana API Record method

@see labs.europeana.eu/api/record/

Attributes

id[RW]

Europeana ID of the record

params[RW]

Request parameters to send to the API

Public Class Methods

new(id, params = {}) click to toggle source

@param [String] id Europeana ID of the record @param [Hash] params Request parameters

# File lib/europeana/record.rb, line 21
def initialize(id, params = {})
  self.id = id
  self.params = params
end

Public Instance Methods

get() click to toggle source

Sends a request for this record to the API

@return [Hash] Record data

# File lib/europeana/record.rb, line 78
def get
  uri = request_uri
  http = Net::HTTP.new(uri.host, uri.port)
  request = Net::HTTP::Get.new(uri.request_uri)
  retries = Europeana.max_retries
  
  begin
    response = http.request(request)
  rescue Timeout::Error, Errno::ECONNREFUSED, EOFError
    retries -= 1
    raise unless retries > 0
    sleep Europeana.retry_delay
    retry
  end
  
  json = JSON.parse(response.body)
  raise Errors::RequestError, json['error'] unless json['success']
  json
rescue JSON::ParserError
  if response.code.to_i == 404
    # Handle HTML 404 responses on malformed record ID, emulating API's
    # JSON response.
    raise Errors::RequestError, "Invalid record identifier: #{@id}"
  else
    raise Errors::ResponseError
  end
end
id=(id) click to toggle source

Sets record ID attribute after validating format.

@param [String] id Record ID

# File lib/europeana/record.rb, line 41
def id=(id)
  raise ArgumentError, "Invalid Europeana record ID." unless id.is_a?(String) && id.match(/\A\/[^\/]+\/[^\/]+\B/)
  @id = id
end
params=(params = {}) click to toggle source

Sets request parameters after validating keys

Valid parameter keys:

  • :callback

For explanations of these request parameters, see: labs.europeana.eu/api/record/

@param (see initialize) @return [Hash] Request parameters

# File lib/europeana/record.rb, line 57
def params=(params = {})
  params.assert_valid_keys(:callback)
  @params = params
end
params_with_authentication() click to toggle source

Returns query params with API key added

@return [Hash]

# File lib/europeana/record.rb, line 31
def params_with_authentication
  raise Europeana::Errors::MissingAPIKeyError unless Europeana.api_key.present?
  params.merge(:wskey => Europeana.api_key)
end
request_uri() click to toggle source

Gets the URI for this Record request with parameters

@return [URI]

# File lib/europeana/record.rb, line 67
def request_uri
  uri = URI.parse(Europeana::URL + "/record" + "#{@id}.json")
  uri.query = params_with_authentication.to_query
  uri
end