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
|