Class: RESTFramework::PageNumberPaginator
- Inherits:
-
BasePaginator
- Object
- BasePaginator
- RESTFramework::PageNumberPaginator
- Defined in:
- lib/rest_framework/paginators.rb
Overview
A simple paginator based on page numbers.
Instance Method Summary collapse
- #_page_query_param ⇒ Object
- #_page_size ⇒ Object
-
#get_page(page_number = nil) ⇒ Object
Get the page and return it so the caller can serialize it.
-
#get_paginated_response(serialized_page) ⇒ Object
Wrap the serialized page with appropriate metadata.
-
#initialize(**kwargs) ⇒ PageNumberPaginator
constructor
A new instance of PageNumberPaginator.
Constructor Details
#initialize(**kwargs) ⇒ PageNumberPaginator
Returns a new instance of PageNumberPaginator.
22 23 24 25 26 27 28 29 30 |
# File 'lib/rest_framework/paginators.rb', line 22 def initialize(**kwargs) super # Exclude any `select` clauses since that would cause `count` to fail with a SQL `SyntaxError`. @count = @data.except(:select).count @page_size = self._page_size @total_pages = @count / @page_size @total_pages += 1 if @count % @page_size != 0 end |
Instance Method Details
#_page_query_param ⇒ Object
56 57 58 |
# File 'lib/rest_framework/paginators.rb', line 56 def _page_query_param return @controller.class.page_query_param&.to_sym end |
#_page_size ⇒ Object
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
# 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) ⇒ Object
Get the page and return it so the caller can serialize it.
61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
# 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. unless 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) ⇒ Object
Wrap the serialized page with appropriate metadata. TODO: include links.
82 83 84 85 86 87 88 89 90 |
# 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 |