Class: Europeana::API::Queue

Inherits:
Object
  • Object
show all
Defined in:
lib/europeana/api/queue.rb

Overview

A queue of API requests to run in parallel

Defined Under Namespace

Classes: Item

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(client) ⇒ Queue

Returns a new instance of Queue.



11
12
13
14
# File 'lib/europeana/api/queue.rb', line 11

def initialize(client)
  @client = client
  @items = []
end

Instance Attribute Details

#clientObject (readonly)

Returns the value of attribute client.



9
10
11
# File 'lib/europeana/api/queue.rb', line 9

def client
  @client
end

Instance Method Details

#add(resource, method, **params) ⇒ Object



20
21
22
# File 'lib/europeana/api/queue.rb', line 20

def add(resource, method, **params)
  @items << Item.new(resource, method, **params)
end

#present?Boolean

Returns:

  • (Boolean)


16
17
18
# File 'lib/europeana/api/queue.rb', line 16

def present?
  @items.present?
end

#runObject



24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/europeana/api/queue.rb', line 24

def run
  responses = []

  client.connection.in_parallel do
    @items.each do |item|
      resource_class = Europeana::API.send(item.resource)
      request = resource_class.send(:api_request_for_endpoint, item.method, item.params)
      request.client = client
      responses << request.execute
    end
  end

  responses.map do |response|
    begin
      response.validate!
      response.body
    rescue StandardError => exception
      exception
    end
  end
end