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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9e9f78cab49a00463a64709b1c5efea22644d2976bda312bcb4af3b33677400a
4
- data.tar.gz: 58798072a6106da67aec4ced5c9bc28596d5262a5dc8cfb1298a7b61a755bffe
3
+ metadata.gz: ce3fabc3535ed2bcff72cf023731eb2735b5125172952eaed585e76b51d1829d
4
+ data.tar.gz: edf8e6afdcaf150eb451852184063eeeaceab550690cd5e96602fdd345ed8c57
5
5
  SHA512:
6
- metadata.gz: 909c1fe75c99020114703d5a9a310fdeb122d09718eb29e7bdfa5f49bfdcd3c793048451af410ae40ade813bd56165cd94b5cfb36cf3284910d10de63187522e
7
- data.tar.gz: a913163ce0ca336ad5ccd8186d2744e435ec255c648569ed75fe2e505dc89f65b36c6b30388dbfca7f104e6ee1f9f5f1a8d8ff0bbe935fa7d3ac303a198b8168
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
- `entity: UserEntity` - класс Grape Entity, который обработает каждую запись (передается вместо `fields`).
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
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-10-25 00:00:00.000000000 Z
11
+ date: 2024-11-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: actionpack