grape-listing 1.3.4 → 1.3.5

Sign up to get free protection for your applications and to get access to all the features.
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