class Slack::Cursor
Attributes
max_retries[R]
page[R]
sleep_interval[R]
Public Class Methods
new(page)
click to toggle source
# File lib/laziness/cursor.rb, line 5 def initialize(page) @page = page @max_retries = (page && page[:max_retries]) || 0 @sleep_interval = (page && page[:sleep_interval]) end
Public Instance Methods
paginate(&blk)
click to toggle source
# File lib/laziness/cursor.rb, line 11 def paginate(&blk) responses = [] if block_given? pager = Pager.new(page) retries = 0 loop do begin response = blk.call(pager) rescue Slack::TooManyRequestsError => e raise e if retries >= max_retries retries += 1 sleep(e.retry_after_in_seconds) next end responses << response break unless has_cursor?(response) retries = 0 pager = pager.next(next_cursor(response)) sleep(sleep_interval) if sleep_interval end end responses end
Private Instance Methods
has_cursor?(response)
click to toggle source
# File lib/laziness/cursor.rb, line 53 def has_cursor?(response) response.respond_to?(:[]) && !response["response_metadata"].nil? && !response["response_metadata"]["next_cursor"].nil? && !response["response_metadata"]["next_cursor"].empty? end
next_cursor(response)
click to toggle source
# File lib/laziness/cursor.rb, line 49 def next_cursor(response) response["response_metadata"]["next_cursor"] unless !has_cursor?(response) end