Module: Paymos::Pagination

Defined in:
lib/paymos/client.rb

Class Method Summary collapse

Class Method Details

.each(fetch, filters, max_pages: 100, &block) ⇒ Object

Raises:

  • (ArgumentError)


296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
# File 'lib/paymos/client.rb', line 296

def each(fetch, filters, max_pages: 100, &block)
  raise ArgumentError, 'max_pages must be a positive integer' unless max_pages.is_a?(Integer) && max_pages.positive?

  filters = filters.dup
  cursor = filters[:cursor]
  max_pages.times do
    page = fetch.call(**filters)
    page.items.each(&block)
    next_cursor = page.next_cursor
    return if next_cursor.nil? || next_cursor.to_s.empty?
    raise Error, 'Paymos API returned the same pagination cursor twice' if next_cursor == cursor

    cursor = next_cursor
    filters[:cursor] = cursor
  end
end