class GoCardless::Paginator
Constants
- DEFAULT_PAGE_NUMBER
- DEFAULT_PAGE_SIZE
Attributes
num_pages[R]
num_records[R]
Public Class Methods
new(client, resource_class, path, query)
click to toggle source
# File lib/gocardless/paginator.rb, line 14 def initialize(client, resource_class, path, query) @client = client @resource_class = resource_class @path, @query = path, query @page_number, @per_page = DEFAULT_PAGE_NUMBER, DEFAULT_PAGE_SIZE end
Public Instance Methods
count()
click to toggle source
Return the total number of records. May trigger an HTTP request.
# File lib/gocardless/paginator.rb, line 65 def count load_page(1) if @num_records.nil? # load pagination metadata @num_records end
each(&block)
click to toggle source
Yield every record from every current page, auto-fetching new pages as the iteration happens. Records are returned as instances of the appropriate resource classes (e.g. Subscription
).
# File lib/gocardless/paginator.rb, line 50 def each(&block) each_page { |page| page.each(&block) } end
each_page() { |page_obj| ... }
click to toggle source
Fetch and yield each page of results.
# File lib/gocardless/paginator.rb, line 55 def each_page page_obj = load_page(1) loop do yield page_obj break unless page_obj.has_next? page_obj = load_page(page_obj.next_page) end end
load_page(page_num)
click to toggle source
Fetch and return a single page.
# File lib/gocardless/paginator.rb, line 35 def load_page(page_num) params = @query.merge(pagination_params(page_num)) response = @client.api_request(:get, @path, :params => params) metadata = parse_metadata(response) @num_records, @num_pages = metadata['records'], metadata['pages'] Page.new(@resource_class, response.parsed, metadata['links']) end
Also aliased as: page
page_count()
click to toggle source
Return the total number of pages. May trigger an HTTP request.
# File lib/gocardless/paginator.rb, line 71 def page_count load_page(1) if @num_records.nil? # load pagination metadata @num_pages end
per_page(results_per_page = nil)
click to toggle source
Set the number of records per page (page size), if an argument is provided. Returns the current per_page
value, whether an argument is provided or not.
# File lib/gocardless/paginator.rb, line 24 def per_page(results_per_page = nil) if results_per_page @num_records, @num_pages = nil, nil @per_page = results_per_page self else @per_page end end
Private Instance Methods
pagination_params(page_num)
click to toggle source
# File lib/gocardless/paginator.rb, line 78 def pagination_params(page_num) { :page => page_num, :per_page => @per_page } end
parse_metadata(response)
click to toggle source
# File lib/gocardless/paginator.rb, line 82 def parse_metadata(response) MultiJson.load(response.headers['X-Pagination']) end