Class: Atum::Core::Paginator

Inherits:
Object
  • Object
show all
Defined in:
lib/atum/core/paginator.rb

Constant Summary collapse

LIMIT_INCREMENT =
50

Instance Method Summary collapse

Constructor Details

#initialize(request, initial_response, options) ⇒ Paginator

Returns a new instance of Paginator.



6
7
8
9
10
# File 'lib/atum/core/paginator.rb', line 6

def initialize(request, initial_response, options)
  @request = request
  @options = options
  @initial_response = initial_response
end

Instance Method Details

#enumeratorObject



12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/atum/core/paginator.rb', line 12

def enumerator
  response = @initial_response
  Enumerator.new do |yielder|
    loop do
      items = @request.unenvelope(response.body)
      items.each { |item| yielder << item }

      break if items.count < response.limit

      new_options = @options.dup
      new_options[:query] = @options.fetch(:query, {}).merge(
        after: response.meta['cursors']['after'],
        limit: response.limit + LIMIT_INCREMENT)

      response = @request.make_request(new_options)
    end
  end.lazy
end