Grape Listing
Гем для пагинации и фильтрации записей с возможностью формирования электронных таблиц (XLSX) на базе Grape.
Установка
Добавить в Gemfile
gem 'grape-listing'
И выполнить:
bundle
Использование
Использование с помощью вызова метода-хелпера listing и передачи в него необходимых опций.
Например:
get 'users' do
listing 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[...] - список полей, по которым должна осуществляться фильтрация (поиск).
Параметры HTTP запроса
Некоторые функции, такие, как поиск (фильтрация), сортировка и формирование эл. таблиц осуществляется путем обработки параметров HTTP запроса.
Поиск
Для поиска по полям необходимо передать их в запросе в виде ?field=value. Для поиска по нескольким полям, параметры должны быть перечислены через &, например: ?field_1=value&field_2=value.
Сортировка
Для сортировки выдачи необходимо передать в параметрах запроса:
sort_by- название поля, по которому должна осуществляться сортировка.sort_orderнаправление, по которому должна осуществляться сортировка (asc/desc).
По умолчанию сортировка осуществляется по id записей в направлении DESC.
Ограничение полей
При передаче параметра columns[]= результаты в ответе ограничиваются переданным массив колонок.
Формирование эл. таблиц
При передаче параметра spreadsheet=true происходит формирование эл. таблицы в виде XLSX файла с учетом всех остальных переданных параметров. Параметр columns при этом является обязательным.
Заголовки эл. таблицы будут взяты из описаний полей таблицы БД с соответствующими названиями. Значения будут сформированы путем обработки переданного списка колонок как методов.
Конфигурация
Добавьте файл конфигурации config/initializers/grape_listing.rb с содержимым:
GrapeListing.configure do |config|
end