class Bunq::Paginated
Public Class Methods
new(resource)
click to toggle source
# File lib/bunq/paginated.rb, line 9 def initialize(resource) @resource = resource end
Public Instance Methods
paginate(count: 200, older_id: nil, newer_id: nil)
click to toggle source
# File lib/bunq/paginated.rb, line 13 def paginate(count: 200, older_id: nil, newer_id: nil) params = setup_params(count, older_id, newer_id) enumerator(params) end
Private Instance Methods
enumerator(params)
click to toggle source
# File lib/bunq/paginated.rb, line 29 def enumerator(params) last_page = false next_params = params Enumerator.new do |yielder| loop do fail StopIteration if last_page result = @resource.with_session { @resource.get(next_params) } result['Response'].each do |item| yielder << item end pagination = result['Pagination'] fail MissingPaginationObject unless pagination last_page = !pagination[paging_url(params)] next if last_page next_params = params.merge( "#{paging_id(params)}": param( paging_id(params), pagination[paging_url(params)], ), ) end end end
paging_id(params)
click to toggle source
# File lib/bunq/paginated.rb, line 64 def paging_id(params) return 'newer_id' if params[:newer_id] 'older_id' end
paging_url(params)
click to toggle source
# File lib/bunq/paginated.rb, line 58 def paging_url(params) return 'newer_url' if params[:newer_id] 'older_url' end
param(name, url)
click to toggle source
# File lib/bunq/paginated.rb, line 70 def param(name, url) CGI.parse(URI(url).query)[name]&.first end
setup_params(count, older_id, newer_id)
click to toggle source
# File lib/bunq/paginated.rb, line 20 def setup_params(count, older_id, newer_id) fail ArgumentError, 'Cant pass both older_id and newer_id' if older_id && newer_id params = {count: count} params[:older_id] = older_id if older_id params[:newer_id] = newer_id if newer_id params end