class RESTFramework::PageNumberPaginator
A simple paginator based on page numbers.
Public Class Methods
new(**kwargs)
click to toggle source
Calls superclass method
RESTFramework::BasePaginator::new
# File lib/rest_framework/paginators.rb, line 23 def initialize(**kwargs) super @count = @data.count @page_size = self._page_size @total_pages = @count / @page_size @total_pages += 1 if (@count % @page_size != 0) end
Public Instance Methods
_page_query_param()
click to toggle source
# File lib/rest_framework/paginators.rb, line 56 def _page_query_param return @controller.class.page_query_param&.to_sym end
_page_size()
click to toggle source
# File lib/rest_framework/paginators.rb, line 32 def _page_size page_size = nil # Get from context, if allowed. if @controller.class.page_size_query_param if page_size = @controller.params[@controller.class.page_size_query_param].presence page_size = page_size.to_i end end # Otherwise, get from config. if !page_size && @controller.class.page_size page_size = @controller.class.page_size end # Ensure we don't exceed the max page size. if @controller.class.max_page_size && page_size > @controller.class.max_page_size page_size = @controller.class.max_page_size end # Ensure we return at least 1. return page_size.zero? ? 1 : page_size end
get_page(page_number=nil)
click to toggle source
Get the page and return it so the caller can serialize it.
# File lib/rest_framework/paginators.rb, line 61 def get_page(page_number=nil) # If page number isn't provided, infer from the params or use 1 as a fallback value. if !page_number page_number = @controller&.params&.[](self._page_query_param) if page_number.blank? page_number = 1 else page_number = page_number.to_i if page_number.zero? page_number = 1 end end end @page_number = page_number # Get the data page and return it so the caller can serialize the data in the proper format. page_index = @page_number - 1 return @data.limit(@page_size).offset(page_index * @page_size) end
get_paginated_response(serialized_page)
click to toggle source
Wrap the serialized page with appropriate metadata. TODO: include links.
# File lib/rest_framework/paginators.rb, line 82 def get_paginated_response(serialized_page) return { count: @count, page: @page_number, page_size: @page_size, total_pages: @total_pages, results: serialized_page, } end