Sha256: 7da36eb4b6d56f3284ea9d4edddcc451efe7751259622ed6e87e016a4a27084d
Contents?: true
Size: 1.38 KB
Versions: 1
Compression:
Stored size: 1.38 KB
Contents
# frozen_string_literal: true module Notion module Api module Pagination class Cursor include Enumerable attr_reader :client attr_reader :verb attr_reader :sleep_interval attr_reader :max_retries attr_reader :params def initialize(client, verb, params = {}) @client = client @verb = verb @params = params.dup @sleep_interval = @params.delete(:sleep_interval) @max_retries = @params.delete(:max_retries) || client.default_max_retries end def each next_cursor = nil retry_count = 0 loop do query = next_cursor.nil? ? params : params.merge(start_cursor: next_cursor) begin response = client.send(verb, query) rescue Notion::Api::Errors::TooManyRequestsError => e raise e if retry_count >= max_retries client.logger.debug("#{self.class}##{__method__}") { e.to_s } retry_count += 1 sleep(e.retry_after) next end yield response break unless response.has_more next_cursor = response.next_cursor break if next_cursor.nil? || next_cursor == '' retry_count = 0 sleep(sleep_interval) if sleep_interval end end end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
notion-ruby-client-0.0.4 | lib/notion/pagination/cursor.rb |