Class: Algolia::PaginatorIterator

Inherits:
BaseIterator show all
Defined in:
lib/algolia/iterators/paginator_iterator.rb

Direct Known Subclasses

RuleIterator, SynonymIterator

Instance Attribute Summary

Attributes inherited from BaseIterator

#index_name, #opts, #transporter

Instance Method Summary collapse

Methods included from Helpers

#check_array, #check_object, #chunk, #deserialize_settings, #get_object_id, #get_option, #handle_params, #hash_includes_subset?, included, #json_to_hash, #path_encode, #symbolize_hash, #to_json, #to_query_string

Constructor Details

#initialize(transporter, index_name, opts) ⇒ PaginatorIterator

Returns a new instance of PaginatorIterator.

Parameters:

  • transporter (Transport::Transport)

    transporter used for requests

  • index_name (String)

    Name of the index

  • opts (Hash)

    contains extra parameters to send with your query



7
8
9
10
11
12
13
14
# File 'lib/algolia/iterators/paginator_iterator.rb', line 7

def initialize(transporter, index_name, opts)
  super(transporter, index_name, opts)

  @data = {
    hitsPerPage: 1000,
    page: 0
  }
end

Instance Method Details

#eachObject



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/algolia/iterators/paginator_iterator.rb', line 16

def each
  loop do
    if @response
      parsed_response = symbolize_hash(@response)
      parsed_data     = symbolize_hash(@data)
      if parsed_response[:hits].length
        parsed_response[:hits].each do |hit|
          hit.delete(:_highlightResult)
          yield hit
        end

        if parsed_response[:nbHits] < parsed_data[:hitsPerPage]
          @response = nil
          @data     = {
            hitsPerPage: 1000,
            page: 0
          }
          raise StopIteration
        end
      end
    end
    @response     = @transporter.read(:POST, get_endpoint, @data, @opts)
    @data[:page] += 1
  end
end

#get_endpointObject

Raises:



42
43
44
# File 'lib/algolia/iterators/paginator_iterator.rb', line 42

def get_endpoint
  raise AlgoliaError, 'Method must be implemented'
end