Grape Paginated
Гем для пагинации и фильтрации записей с возможностью формирования электронных таблиц (XLSX) на базе Grape.
Установка
Добавить в Gemfile
gem 'paginated'
И выполнить:
bundle
Использование
Использование с помощью вызова метода-хелпера paginated
и передачи в него необходимых опций.
Например:
get 'users' do
paginated model: User,
entity: UserEntity,
search: %w[email name|ilike role|custom.for_role]
end
Опции (с примерами):
model: User
- модель, записи которой нужно обработать.
entity: UserEntity
- класс Grape Entity, который обработает каждую запись (передается вместо fields
).
scopes: proc {...}
- блок кода для применения
fields: %i[...]
- список полей, которые должны присутствовать в списке записей (передается вместо entity
).
search: %w[...]
- список полей, по которым должна осуществляться фильтрация (поиск).
spreadsheet: '[...]'
- список полей/колонок для формирования эл. таблицы, JSON в виде строки. Пример:
[
{
"column": "id",
"title": "ID"
},
{
"column": "name",
"title": "Название"
}
]
При передаче speadsheet
происходит формирование эл. таблицы в виде XLSX файла.
Параметры HTTP запроса
Поиск и сортировка осуществляется путем обработки параметров HTTP запроса.
Для поиска по полям необходимо передать их в запросе в виде ?field=value
. Для поиска по нескольким полям, параметры должны быть перечислены через &
, например: ?field_1=value&field_2=value
.
Для сортировки выдачи необходимо передать в параметрах запроса:
sort_by
- название поля, по которому должна осуществляться сортировка.sort_order
направление, по которому должна осуществляться сортировка (asc/desc
).
По умолчанию сортировка осуществляется по id
записей в направлении DESC
.
Конфигурация
Добавьте файл конфигурации config/initializers/grape_paginated.rb
с содержимым:
GrapePaginated::Configuration.configure do |config|
end