Class: PackAPI::Pagination::PaginatorBuilder
- Inherits:
-
Object
- Object
- PackAPI::Pagination::PaginatorBuilder
- Defined in:
- lib/pack_api/pagination/paginator_builder.rb
Constant Summary collapse
- DEFAULT_SORT =
'id asc'
Instance Attribute Summary collapse
-
#paginator ⇒ Object
Returns the value of attribute paginator.
Class Method Summary collapse
Instance Method Summary collapse
-
#initialize ⇒ PaginatorBuilder
constructor
A new instance of PaginatorBuilder.
- #set_cursor(cursor:, per_page: nil, sort: nil) ⇒ Object
- #set_params(query: nil, sort: nil, total_items: nil, per_page: nil, offset: nil, metadata: nil) ⇒ Object
Constructor Details
#initialize ⇒ PaginatorBuilder
Returns a new instance of PaginatorBuilder.
38 39 40 |
# File 'lib/pack_api/pagination/paginator_builder.rb', line 38 def initialize @paginator = Paginator.new end |
Instance Attribute Details
#paginator ⇒ Object
Returns the value of attribute paginator.
30 31 32 |
# File 'lib/pack_api/pagination/paginator_builder.rb', line 30 def paginator @paginator end |
Class Method Details
.build {|builder| ... } ⇒ Object
32 33 34 35 36 |
# File 'lib/pack_api/pagination/paginator_builder.rb', line 32 def self.build builder = new yield(builder) builder.paginator end |
Instance Method Details
#set_cursor(cursor:, per_page: nil, sort: nil) ⇒ Object
42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/pack_api/pagination/paginator_builder.rb', line 42 def set_cursor(cursor:, per_page: nil, sort: nil) cursor_params = PaginatorCursor.parse(cursor) effective_per_page = per_page.presence || cursor_params[:per_page] effective_per_page = :all if effective_per_page.to_s == 'all' @paginator.query = cursor_params[:query] @paginator.total_items = cursor_params[:total_items] @paginator.per_page = effective_per_page @paginator.sort = sort.presence || cursor_params[:sort] @paginator.offset = effective_offset(cursor_params, sort) @paginator. = cursor_params[:metadata] end |
#set_params(query: nil, sort: nil, total_items: nil, per_page: nil, offset: nil, metadata: nil) ⇒ Object
62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 |
# File 'lib/pack_api/pagination/paginator_builder.rb', line 62 def set_params(query: nil, sort: nil, total_items: nil, per_page: nil, offset: nil, metadata: nil) @paginator.query ||= {} if query.present? original_query = @paginator.query @paginator.query = @paginator.query.deep_merge(resolve_query_params(query).deep_symbolize_keys) @recordset_changed = original_query.to_json != @paginator.query.to_json end @paginator.sort ||= DEFAULT_SORT if sort.present? @recordset_changed = sort.to_json != @paginator.sort.to_json @paginator.sort = sort.presence end @paginator.total_items ||= 0 if total_items.present? @paginator.total_items = total_items end @paginator.offset ||= 0 if offset.present? @paginator.offset = offset elsif @recordset_changed @paginator.offset = 0 end @paginator.per_page ||= Paginator::DEFAULT_PER_PAGE if per_page.present? @paginator.per_page = per_page @paginator.offset = 0 if per_page == :all end @paginator. ||= end |