Grape Listing
Гем для пагинации и фильтрации записей с возможностью формирования электронных таблиц (XLSX) на базе Grape.
Установка
Добавить в Gemfile
gem 'grape-listing'
И выполнить:
bundle
Использование
Использование с помощью вызова метода-хелпера listing
и передачи в него необходимых опций.
Например:
get 'users' do
listing model: User,
entity: UserEntity
end
Опции (с примерами):
model: User
- модель, записи которой нужно обработать
preload: [:posts]
- связи, которые нужно подгрузить для eager load
entity: UserEntity
- класс Grape Entity, который обработает каждую запись (передается вместо fields
)
scopes: proc {...}
- блок кода для применения
fields: %i[...]
- список полей, которые должны присутствовать в списке записей (передается вместо entity
)
search: %w[...]
- список полей, по которым должна осуществляться фильтрация (поиск)
sortable: %w[...]
- список полей, по которым может осуществляться сортировка
paginate: false
- отдавать результат без пагинации, сразу всей коллекцией (по умолчанию - с пагинацией)
Параметры HTTP запроса
Некоторые функции, такие, как поиск (фильтрация), сортировка и формирование эл. таблиц осуществляется путем обработки параметров HTTP запроса.
Поиск
Для возможности поиска необходимо передать названия полей, по которым может осуществляться поиск, в виде массива в опции search
.
Для осуществления фильтрации необходимо передать параметры в запросе в виде ?field=value
. Для поиска по нескольким полям, параметры должны быть перечислены через &
, например: ?field_1=value&field_2=value
.
В общем случае, названия полей соответствуют названиями параметров (например поле name
и параметр name
).
Пример использования с осуществлением поиска по полю name
с полным совпадением:
get 'users' do
listing model: User,
entity: UserEntity,
search: %w[name]
end
GET http://localhost:3000/api/users?name=Ivan
Сортировка
Для сортировки выдачи необходимо передать в параметрах запроса:
-
sort_by
- название поля, по которому должна осуществляться сортировка.
-
sort_order
направление, по которому должна осуществляться сортировка (asc/desc
).
По умолчанию сортировка осуществляется по id
записей в направлении DESC
.
Ограничение полей
При передаче параметра columns[]=
результаты в ответе ограничиваются переданным массив колонок.
Формирование эл. таблиц
При передаче параметра spreadsheet=true
происходит формирование эл. таблицы в виде XLSX файла с учетом всех остальных переданных параметров.
Заголовки эл. таблицы будут взяты из описаний полей таблицы БД с соответствующими названиями или описаний полей Grape Entity.
Конфигурация
Добавьте файл конфигурации config/initializers/grape_listing.rb
с содержимым:
GrapeListing.configure do |config|
end