lib/poms/api/pagination_client.rb in poms-2.1.3 vs lib/poms/api/pagination_client.rb in poms-2.2.0

- old
+ new

@@ -1,36 +1,31 @@ require 'poms/api/json_client' +require 'poms/api/request' module Poms module Api # Creates lazy Enumerators to handle pagination of the Poms API and performs # the request on demand. module PaginationClient module_function - def get(uri, credentials) - execute(uri) do |page_uri| - Api::JsonClient.get(page_uri, credentials) - end - end - - def post(uri, body, credentials) - execute(uri) do |page_uri| - Api::JsonClient.post(page_uri, body, credentials) - end - end - - def execute(uri) + def execute(request) Enumerator.new do |yielder| - page = Page.new(uri) + page = Page.new(request.uri) loop do - page.execute { |page_uri| yield page_uri } + page.execute { |page_uri| client_execute(request, page_uri) } page.items.each { |item| yielder << item } raise StopIteration if page.final? page = page.next_page end end.lazy end + + def client_execute(request, page_uri) + Api::JsonClient.execute(request.merge(uri: page_uri)) + end + + private_class_method :client_execute # Keep track of number of items and how many have been retrieved class Page def initialize(uri, offset = 0) uri.query_values = { offset: offset }