Module: Prato::Internal::Pipeline::Pagination

Extended by:
Pagination
Included in:
Pagination
Defined in:
lib/prato/internal/pipeline/pagination.rb

Instance Method Summary collapse

Instance Method Details

#paginate_query(query_state, config, raw_page, raw_per_page) ⇒ Object



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/prato/internal/pipeline/pagination.rb', line 9

def paginate_query(query_state, config, raw_page, raw_per_page)
  page = raw_page || 1
  per_page = raw_per_page || config.default_page_size
  if per_page > config.maximum_page_size
    per_page = config.maximum_page_size
  end

  dataset = query_state.dataset
  offset = (page - 1) * per_page

  paginated_dataset = if query_state.unmaterialized?
                        dataset.offset(offset).limit(per_page)
                      else
                        dataset.slice(offset, per_page) || []
                      end

  query_state.with_dataset(paginated_dataset)
end