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 }