grape-listing 1.3.4 → 1.3.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +7 -5
- data/lib/grape/dsl.rb +4 -3
- data/lib/listing_service/args_handling.rb +3 -0
- data/lib/listing_service/listing.rb +1 -1
- data/lib/listing_service/pagination.rb +1 -1
- data/lib/listing_service/search.rb +1 -1
- data/lib/listing_service/spreadsheet.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ce3fabc3535ed2bcff72cf023731eb2735b5125172952eaed585e76b51d1829d
|
4
|
+
data.tar.gz: edf8e6afdcaf150eb451852184063eeeaceab550690cd5e96602fdd345ed8c57
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: cc56a44b5ff3259e37519142891cb9a332e3833c0c88bf9a37b3aec5ea31d7c6077cb6c7dd664d8407a288d77d7dc992898b58f3117536eabe5159638204c592
|
7
|
+
data.tar.gz: 73b3df84fbcc94f86bbc41c5323aa1bf8ce5ddbb00890199d560bf3d00fd1fda704a57d9dce71fcebaf84b07b094a6495b6fe5090899009bfeaf30f3151c8733
|
data/README.md
CHANGED
@@ -33,17 +33,19 @@ end
|
|
33
33
|
|
34
34
|
Опции (с примерами):
|
35
35
|
|
36
|
-
`model: User` - модель, записи которой нужно
|
36
|
+
`model: User` - модель, записи которой нужно обработать
|
37
37
|
|
38
|
-
`
|
38
|
+
`preload: [:posts]` - связи, которые нужно подгрузить для eager load
|
39
|
+
|
40
|
+
`entity: UserEntity` - класс Grape Entity, который обработает каждую запись (передается вместо `fields`)
|
39
41
|
|
40
42
|
`scopes: proc {...}` - блок кода для применения
|
41
43
|
|
42
|
-
`fields: %i[...]` - список полей, которые должны присутствовать в списке записей (передается вместо `entity`)
|
44
|
+
`fields: %i[...]` - список полей, которые должны присутствовать в списке записей (передается вместо `entity`)
|
43
45
|
|
44
|
-
`search: %w[...]` - список полей, по которым должна осуществляться фильтрация (поиск)
|
46
|
+
`search: %w[...]` - список полей, по которым должна осуществляться фильтрация (поиск)
|
45
47
|
|
46
|
-
`sortable: %w[...]` - список полей, по которым может осуществляться
|
48
|
+
`sortable: %w[...]` - список полей, по которым может осуществляться сортировка
|
47
49
|
|
48
50
|
`paginate: false` - отдавать результат без пагинации, сразу всей коллекцией (по умолчанию - с пагинацией)
|
49
51
|
|
data/lib/grape/dsl.rb
CHANGED
@@ -4,13 +4,13 @@ module Grape
|
|
4
4
|
module DSL
|
5
5
|
module InsideRoute
|
6
6
|
|
7
|
-
def listing(model:, entity:, scopes: nil, search: nil, sortable: nil, paginate: true, caching: false)
|
7
|
+
def listing(model:, entity:, scopes: nil, search: nil, sortable: nil, paginate: true, caching: false, preload: nil)
|
8
8
|
# параметры запроса API
|
9
9
|
request_method = request.env['REQUEST_METHOD']
|
10
10
|
request_uri = request.env['REQUEST_URI']
|
11
11
|
|
12
12
|
# опции для сервиса
|
13
|
-
opts = listing_opts(model, entity, scopes, search, sortable, caching, request_method, request_uri)
|
13
|
+
opts = listing_opts(model, entity, scopes, search, sortable, caching, request_method, request_uri, preload)
|
14
14
|
|
15
15
|
if params[:spreadsheet]
|
16
16
|
listing_spreadsheet(**opts)
|
@@ -23,10 +23,11 @@ module Grape
|
|
23
23
|
|
24
24
|
private
|
25
25
|
|
26
|
-
def listing_opts(model, entity, scopes, search, sortable, caching, request_method, request_uri)
|
26
|
+
def listing_opts(model, entity, scopes, search, sortable, caching, request_method, request_uri, preload)
|
27
27
|
# стандартные опции
|
28
28
|
opts = {
|
29
29
|
model:,
|
30
|
+
preload:,
|
30
31
|
entity:,
|
31
32
|
scopes:,
|
32
33
|
search:,
|
@@ -7,6 +7,9 @@ module GrapeListing
|
|
7
7
|
# обрабатываемая модель
|
8
8
|
@model = args[:model]
|
9
9
|
|
10
|
+
# список связей, необходимых для подгрузки eager load
|
11
|
+
@preload = args[:preload] || []
|
12
|
+
|
10
13
|
# параметры адреса запроса API
|
11
14
|
@request_method = args[:request_method]
|
12
15
|
@request_uri = args[:request_uri]
|
@@ -17,7 +17,7 @@ module GrapeListing
|
|
17
17
|
|
18
18
|
def list
|
19
19
|
# коллекция записей ActiveRecord для применения аггрегирования
|
20
|
-
list = @objects || @model.merge(@scopes)
|
20
|
+
list = @objects || @model.preload(@preload).merge(@scopes)
|
21
21
|
|
22
22
|
# применение сортировки к коллекции записей
|
23
23
|
@objects = list.merge(sort_proc)
|
@@ -17,7 +17,7 @@ module GrapeListing
|
|
17
17
|
|
18
18
|
def paginate
|
19
19
|
# коллекция записей ActiveRecord для применения аггрегирования
|
20
|
-
list = @objects || @model.merge(@scopes)
|
20
|
+
list = @objects || @model.preload(@preload).merge(@scopes)
|
21
21
|
|
22
22
|
# применение сортировки и пагинации к коллекции записей
|
23
23
|
@objects = list.offset(@offset).merge(sort_proc).limit(@limit)
|
@@ -6,7 +6,7 @@ module GrapeListing
|
|
6
6
|
def search
|
7
7
|
@search_fields&.each do |field|
|
8
8
|
# коллекция записей для дальнейшей фильтрации
|
9
|
-
list = @objects || @model.merge(@scopes)
|
9
|
+
list = @objects || @model.preload(@preload).merge(@scopes)
|
10
10
|
|
11
11
|
# оператор и значение для поиска
|
12
12
|
operator, value = search_operands(field)
|
@@ -15,7 +15,7 @@ module GrapeListing
|
|
15
15
|
search
|
16
16
|
|
17
17
|
# коллекция записей ActiveRecord для формирования эл. таблицы
|
18
|
-
records = @objects || @model.merge(@scopes)
|
18
|
+
records = @objects || @model.preload(@preload).merge(@scopes)
|
19
19
|
|
20
20
|
# ограничение записей
|
21
21
|
records = records.order(:id).offset(@offset).limit(@limit)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: grape-listing
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.3.
|
4
|
+
version: 1.3.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Павел Бабин
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2024-
|
11
|
+
date: 2024-11-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: actionpack
|