class Europeana::API::Request

An API request

Attributes

api_url[R]
body[R]
client[W]
endpoint[R]
headers[R]
params[R]

Public Class Methods

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

@param endpoint [Hash] endpoint options @param params [Hash]

# File lib/europeana/api/request.rb, line 17
def initialize(endpoint, params = {})
  @endpoint = endpoint
  @params = params.dup
  extract_special_params
end

Public Instance Methods

client() click to toggle source
# File lib/europeana/api/request.rb, line 37
def client
  @client ||= Client.new
end
execute(&block) click to toggle source

@return [Response]

# File lib/europeana/api/request.rb, line 25
def execute(&block)
  response = Response.new(self, faraday_response(&block))
  return response if client.in_parallel?

  response.validate!
  response.body
end
url() click to toggle source
# File lib/europeana/api/request.rb, line 33
def url
  build_api_url(format_params)
end

Protected Instance Methods

build_api_url(params = {}) click to toggle source
# File lib/europeana/api/request.rb, line 80
def build_api_url(params = {})
  request_path = format(endpoint[:path], params)
  if api_url.nil?
    request_path.sub(%r{\A/}, '') # remove leading slash for relative URLs
  else
    api_url + request_path
  end
end
endpoint_path_format_keys() click to toggle source
# File lib/europeana/api/request.rb, line 76
def endpoint_path_format_keys
  @endpoint_path_format_keys ||= endpoint[:path].scan(/%\{(.*?)\}/).flatten.map(&:to_sym)
end
extract_special_params() click to toggle source
# File lib/europeana/api/request.rb, line 43
def extract_special_params
  @api_url = @params.delete(:api_url)
  @headers = @params.delete(:headers)
  @body = @params.delete(:body) unless http_method == :get
end
faraday_response() { |request| ... } click to toggle source
# File lib/europeana/api/request.rb, line 49
def faraday_response
  client.send(http_method) do |request|
    request.url(url)
    request.params = query_params
    request.headers.merge!(endpoint[:headers] || {}).merge!(headers || {})
    request.body = body unless http_method == :get
    yield(request) if block_given?
    # logger.debug("API request: #{request.inspect}")
  end
end
format_params() click to toggle source
# File lib/europeana/api/request.rb, line 68
def format_params
  params.slice(*endpoint_path_format_keys)
end
http_method() click to toggle source
# File lib/europeana/api/request.rb, line 64
def http_method
  endpoint[:method] || :get
end
logger() click to toggle source
# File lib/europeana/api/request.rb, line 60
def logger
  Europeana::API.logger
end
query_params() click to toggle source
# File lib/europeana/api/request.rb, line 72
def query_params
  params.except(*endpoint_path_format_keys)
end