class ScientificProtocols::Client

Constants

HEADERS
REQUESTS
URL

Public Class Methods

new() click to toggle source
# File lib/scientificprotocols/client.rb, line 19
def initialize
  # Setup HTTP request connection to Zenodo.
  @connection ||= Faraday.new do |builder|
    builder.request :multipart
    builder.request :url_encoded
    builder.response :logger
    builder.adapter Faraday.default_adapter
  end
end

Public Instance Methods

request(method, path, query = {}, headers = HEADERS) click to toggle source

@param [:get, :post, :put, :delete] method. @param [String] path. @param [Hash] query (optional). @param [Hash] headers request headers (optional). @raise [ArgumentError] If the response is blank. @raise [ResourceNotFoundError] If the response code is 404. @raise [ClientError] If the response code is not in the success range. @return [Faraday::Response] server response.

# File lib/scientificprotocols/client.rb, line 37
def request(method, path, query = {}, headers = HEADERS)
  raise ArgumentError, "Unsupported method #{method.inspect}. Only :get, :post, :put, :delete are allowed" unless REQUESTS.include?(method)

  payload = nil
  if query.present?
    accept = headers.present? ? headers['Accept'] : nil
    if accept.present? && accept == 'application/json'
      payload = JSON.generate(query)
    else
      payload = query
    end
  end
  response = @connection.run_request(method, "#{URL}#{path}", payload, headers)

  case response.status.to_i
    when 200..299
      return response
    when 404
      raise ResourceNotFoundError.new(response: response)
    else
      raise ClientError.new(response: response)
  end
end