Class: Zenodo::Client

Inherits:
Object
  • Object
show all
Includes:
DSL, Errors, Utils
Defined in:
lib/zenodo/client.rb

Constant Summary collapse

URL =
'https://zenodo.org/api/'
REQUESTS =
[:get, :post, :put, :delete]
HEADERS =
{'Accept' => 'application/json', 'Content-Type' => 'application/json'}

Instance Method Summary collapse

Methods included from DSL::DepositionActions

#discard_deposition, #edit_deposition, #publish_deposition

Methods included from DSL::DepositionFiles

#create_deposition_file, #delete_deposition_file, #get_deposition_file, #get_deposition_files, #sort_deposition_files, #update_deposition_file

Methods included from DSL::Depositions

#create_deposition, #delete_deposition, #get_deposition, #get_depositions, #update_deposition

Constructor Details

#initialize(api_key = Zenodo.api_key) ⇒ Client

Returns a new instance of Client.

Parameters:

  • api_key (String) (defaults to: Zenodo.api_key)


20
21
22
23
24
25
26
27
28
29
30
# File 'lib/zenodo/client.rb', line 20

def initialize(api_key = Zenodo.api_key)
  @api_key = api_key

  # Setup HTTP request connection to Zenodo.
  @connection ||= Faraday.new do |builder|
    builder.request :multipart
    builder.request :url_encoded
    builder.response :logger if Zenodo.logger
    builder.adapter Faraday.default_adapter
  end
end

Instance Method Details

#request(method, path, query = {}, headers = HEADERS) ⇒ Faraday::Response

Returns server response.

Parameters:

  • method. (:get, :post, :put, :delete)
  • path. (String)
  • query (Hash) (defaults to: {})

    (optional).

  • headers (Hash) (defaults to: HEADERS)

    request headers (optional).

Returns:

  • (Faraday::Response)

    server response.

Raises:

  • (ArgumentError)

    If the response is blank.

  • (ResourceNotFoundError)

    If the response code is 404.

  • (ClientError)

    If the response code is not in the success range.



40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# File 'lib/zenodo/client.rb', line 40

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

  token_url = UrlHelper.build_url(path: "#{URL}#{path}", params: {access_token: @api_key})
  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, token_url, 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