Grape Paginated

Gem Version

Гем для пагинации и фильтрации записей с возможностью формирования электронных таблиц (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