Skip to content

Instantly share code, notes, and snippets.

@havenwood
Created November 6, 2019 00:18
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save havenwood/0369ac3590c207911c40e24e4b4b966b to your computer and use it in GitHub Desktop.
Save havenwood/0369ac3590c207911c40e24e4b4b966b to your computer and use it in GitHub Desktop.
class ResponseEnumerator < Enumerator
DEFAULT_PER_PAGE = 25
attr_accessor :per_page
def initialize(square, http_verb:, path:, data:,
fields:, parameters: {}, memoize: true, per_page: nil)
@per_page = per_page || DEFAULT_PER_PAGE
@memoized_responses = []
@params = parameters.fetch :params
super() do |yielder|
the_end = false
@memoized_responses.each do |response|
yielder << response
the_end = true unless response.cursor
end
loop do
break if the_end
response = Response.new square, http_verb: http_verb, path: path,
data: data, fields: fields, parameters: parameters
@memoized_responses << response if memoize
yielder << response
cursor = response.cursor
break unless cursor
@params[:cursor] = cursor
end
end
end
def paginate(page:, per_page: @per_page)
lazy.flat_map(&:to_a).drop(page.pred * per_page).first(per_page)
end
def clear
@params[:cursor] = nil
@memoized_responses.clear
rewind
end
alias flush_cache clear
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment