Module: JSONAPI::Utils::Support::Pagination
- Included in:
- Response::Support
- Defined in:
- lib/jsonapi/utils/support/pagination.rb
Instance Method Summary collapse
- #apply_pagination(records, options = {}) ⇒ Object
- #apply_pagination?(options) ⇒ Boolean
- #count_records(records, options) ⇒ Object
- #pagination_params(records, options) ⇒ Object
- #paginator(params) ⇒ Object
- #set_pagination(options) ⇒ Object
Instance Method Details
#apply_pagination(records, options = {}) ⇒ Object
5 6 7 8 9 10 11 12 13 14 15 |
# File 'lib/jsonapi/utils/support/pagination.rb', line 5 def apply_pagination(records, = {}) return records unless apply_pagination?() pagination = set_pagination() records = if records.is_a?(Array) records[pagination[:range]] else pagination[:paginator].apply(records, nil) end end |
#apply_pagination?(options) ⇒ Boolean
17 18 19 20 |
# File 'lib/jsonapi/utils/support/pagination.rb', line 17 def apply_pagination?() JSONAPI.configuration.default_paginator != :none && ([:paginate].nil? || [:paginate]) end |
#count_records(records, options) ⇒ Object
62 63 64 65 66 67 68 69 70 71 |
# File 'lib/jsonapi/utils/support/pagination.rb', line 62 def count_records(records, ) if [:count].present? [:count] elsif records.is_a?(Array) records.length else records = apply_filter(records, ) if params[:filter].present? records.except(:group, :order).count("DISTINCT #{records.table.name}.id") end end |
#pagination_params(records, options) ⇒ Object
22 23 24 25 26 27 28 29 30 31 32 |
# File 'lib/jsonapi/utils/support/pagination.rb', line 22 def pagination_params(records, ) @paginator ||= paginator(params) if @paginator && JSONAPI.configuration.top_level_links_include_pagination = {} @paginator.class.requires_record_count && [:record_count] = count_records(records, ) @paginator.links_page_params() else {} end end |
#paginator(params) ⇒ Object
34 35 36 37 38 39 40 41 42 43 |
# File 'lib/jsonapi/utils/support/pagination.rb', line 34 def paginator(params) page_params = ActionController::Parameters.new(params[:page]) @paginator ||= if JSONAPI.configuration.default_paginator == :paged PagedPaginator.new(page_params) elsif JSONAPI.configuration.default_paginator == :offset OffsetPaginator.new(page_params) end end |
#set_pagination(options) ⇒ Object
45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/jsonapi/utils/support/pagination.rb', line 45 def set_pagination() page_params = ActionController::Parameters.new(@request.params[:page]) if JSONAPI.configuration.default_paginator == :paged @_paginator ||= PagedPaginator.new(page_params) number = page_params['number'].to_i.nonzero? || 1 size = page_params['size'].to_i.nonzero? || JSONAPI.configuration.default_page_size { paginator: @_paginator, range: (number - 1) * size..number * size - 1 } elsif JSONAPI.configuration.default_paginator == :offset @_paginator ||= OffsetPaginator.new(page_params) offset = page_params['offset'].to_i.nonzero? || 0 limit = page_params['limit'].to_i.nonzero? || JSONAPI.configuration.default_page_size { paginator: @_paginator, range: offset..offset + limit - 1 } else {} end end |