ree_lib 1.0.49 → 1.0.50

Sign up to get free protection for your applications and to get access to all the features.
Files changed (46) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +4 -3
  3. data/lib/ree_lib/Packages.schema.json +4 -0
  4. data/lib/ree_lib/packages/ree_actions/spec/ree_actions/dsl_spec.rb +17 -10
  5. data/lib/ree_lib/packages/ree_dao/Package.schema.json +10 -0
  6. data/lib/ree_lib/packages/ree_dao/package/ree_dao/aggregate_dsl.rb +26 -0
  7. data/lib/ree_lib/packages/ree_dao/package/ree_dao/association.rb +311 -0
  8. data/lib/ree_lib/packages/ree_dao/package/ree_dao/associations.rb +148 -0
  9. data/lib/ree_lib/packages/ree_dao/package/ree_dao/beans/dao_cache.rb +40 -19
  10. data/lib/ree_lib/packages/ree_dao/package/ree_dao/contract/dao_dataset_contract.rb +15 -0
  11. data/lib/ree_lib/packages/ree_dao/package/ree_dao/contract/entity_contract.rb +15 -0
  12. data/lib/ree_lib/packages/ree_dao/package/ree_dao/dataset_extensions.rb +4 -0
  13. data/lib/ree_lib/packages/ree_dao/package/ree_dao/dsl.rb +1 -1
  14. data/lib/ree_lib/packages/ree_dao/package/ree_dao/functions/build_pg_connection.rb +1 -0
  15. data/lib/ree_lib/packages/ree_dao/package/ree_dao/functions/build_sqlite_connection.rb +1 -0
  16. data/lib/ree_lib/packages/ree_dao/package/ree_dao/functions/drop_cache.rb +1 -1
  17. data/lib/ree_lib/packages/ree_dao/package/ree_dao/functions/init_cache.rb +1 -1
  18. data/lib/ree_lib/packages/ree_dao/package/ree_dao/functions/load_agg.rb +63 -0
  19. data/lib/ree_lib/packages/ree_dao/package/ree_dao/thread_parents.rb +40 -0
  20. data/lib/ree_lib/packages/ree_dao/package/ree_dao.rb +9 -0
  21. data/lib/ree_lib/packages/ree_dao/schemas/ree_dao/functions/build_pg_connection.schema.json +1 -1
  22. data/lib/ree_lib/packages/ree_dao/schemas/ree_dao/functions/build_sqlite_connection.schema.json +1 -1
  23. data/lib/ree_lib/packages/ree_dao/schemas/ree_dao/functions/load_agg.schema.json +43 -0
  24. data/lib/ree_lib/packages/ree_dao/spec/ree_dao/functions/load_agg/load_agg_benchmark_spec.rb +414 -0
  25. data/lib/ree_lib/packages/ree_dao/spec/ree_dao/functions/load_agg/load_agg_spec.rb +605 -0
  26. data/lib/ree_lib/packages/ree_dao/spec/ree_dao/functions/load_agg/ree_dao_load_agg_test.rb +524 -0
  27. data/lib/ree_lib/packages/ree_logger/package/ree_logger/multi_logger.rb +19 -10
  28. data/lib/ree_lib/packages/ree_logger/spec/ree_logger/multi_logger_spec.rb +10 -0
  29. data/lib/ree_lib/packages/ree_mapper/package/ree_mapper/mapper_factory_proxy.rb +6 -3
  30. data/lib/ree_lib/packages/ree_std/.gitignore +0 -0
  31. data/lib/ree_lib/packages/ree_std/.rspec +2 -0
  32. data/lib/ree_lib/packages/ree_std/Package.schema.json +24 -0
  33. data/lib/ree_lib/packages/ree_std/bin/console +5 -0
  34. data/lib/ree_lib/packages/ree_std/package/ree_std/functions/retry_on_fail.rb +46 -0
  35. data/lib/ree_lib/packages/ree_std/package/ree_std/retry.rb +67 -0
  36. data/lib/ree_lib/packages/ree_std/package/ree_std.rb +6 -0
  37. data/lib/ree_lib/packages/ree_std/schemas/ree_std/functions/retry_on_fail.schema.json +38 -0
  38. data/lib/ree_lib/packages/ree_std/spec/package_schema_spec.rb +14 -0
  39. data/lib/ree_lib/packages/ree_std/spec/ree_std/functions/retry_on_fail_spec.rb +97 -0
  40. data/lib/ree_lib/packages/ree_std/spec/spec_helper.rb +3 -0
  41. data/lib/ree_lib/packages/ree_swagger/package/ree_swagger/functions/build_request_body_schema.rb +5 -0
  42. data/lib/ree_lib/packages/ree_swagger/package/ree_swagger/functions/build_serializer_schema.rb +5 -0
  43. data/lib/ree_lib/packages/ree_swagger/spec/functions/build_endpoint_schema_spec.rb +4 -2
  44. data/lib/ree_lib/packages/ree_swagger/spec/functions/build_request_body_spec.rb +4 -2
  45. data/lib/ree_lib/version.rb +1 -1
  46. metadata +38 -2
@@ -0,0 +1,605 @@
1
+ # frozen_string_literal: true
2
+ require 'faker'
3
+ require 'benchmark'
4
+
5
+ RSpec.describe :load_agg do
6
+ link :build_pg_connection, from: :ree_dao
7
+ link :load_agg, from: :ree_dao
8
+
9
+ after do
10
+ Ree.disable_irb_mode
11
+ end
12
+
13
+ before :all do
14
+ connection = build_pg_connection(ReeDaoLoadAggTest::Db::DB_CONFIG)
15
+
16
+ connection.drop_table(:organizations, cascade: true) if connection.table_exists?(:organizations)
17
+ connection.drop_table(:users, cascade: true) if connection.table_exists?(:users)
18
+ connection.drop_table(:user_passports, cascade: true) if connection.table_exists?(:user_passports)
19
+ connection.drop_table(:books, cascade: true) if connection.table_exists?(:books)
20
+ connection.drop_table(:chapters, cascade: true) if connection.table_exists?(:chapters)
21
+ connection.drop_table(:authors, cascade: true) if connection.table_exists?(:authors)
22
+ connection.drop_table(:reviews, cascade: true) if connection.table_exists?(:reviews)
23
+ connection.drop_table(:review_authors, cascade: true) if connection.table_exists?(:review_authors)
24
+
25
+ connection.create_table :organizations do
26
+ primary_key :id
27
+
28
+ column :name, 'varchar(256)'
29
+ end
30
+
31
+ connection.create_table :users do
32
+ primary_key :id
33
+
34
+ column :name, 'varchar(256)'
35
+ column :age, :integer
36
+ foreign_key :organization_id, :organizations, null: false, on_delete: :cascade
37
+ end
38
+
39
+ connection.create_table :user_passports do
40
+ primary_key :id
41
+
42
+ foreign_key :user_id, :users, null: false, on_delete: :cascade
43
+ column :info, 'varchar(256)'
44
+ end
45
+
46
+ connection.create_table :books do
47
+ primary_key :id
48
+
49
+ foreign_key :user_id, :users, null: false, on_delete: :cascade
50
+ column :title, 'varchar(256)'
51
+ end
52
+
53
+ connection.create_table :chapters do
54
+ primary_key :id
55
+
56
+ foreign_key :book_id, :books, null: false, on_delete: :cascade
57
+ column :title, 'varchar(256)'
58
+ end
59
+
60
+ connection.create_table :reviews do
61
+ primary_key :id
62
+
63
+ foreign_key :book_id, :books, null: false, on_delete: :cascade
64
+ column :rating, :integer
65
+ end
66
+
67
+ connection.create_table :review_authors do
68
+ primary_key :id
69
+
70
+ foreign_key :review_id, :reviews, null: false, on_delete: :cascade
71
+ column :name, 'varchar(256)'
72
+ end
73
+
74
+ connection.create_table :authors do
75
+ primary_key :id
76
+
77
+ foreign_key :book_id, :books, null: false, on_delete: :cascade
78
+ column :name, 'varchar(256)'
79
+ end
80
+
81
+ connection.disconnect
82
+ end
83
+
84
+ require_relative 'ree_dao_load_agg_test'
85
+
86
+ class ReeDaoLoadAggTest::UsersAgg
87
+ include ReeDao::AggregateDSL
88
+
89
+ aggregate :users_agg do
90
+ link :users, from: :ree_dao_load_agg_test
91
+ link :organizations, from: :ree_dao_load_agg_test
92
+ link :user_passports, from: :ree_dao_load_agg_test
93
+ link :books, from: :ree_dao_load_agg_test
94
+ link :chapters, from: :ree_dao_load_agg_test
95
+ link :authors, from: :ree_dao_load_agg_test
96
+ link :reviews, from: :ree_dao_load_agg_test
97
+ link :review_authors, from: :ree_dao_load_agg_test
98
+ link :load_agg, from: :ree_dao
99
+ end
100
+
101
+ def call(ids_or_scope, **opts)
102
+ load_agg(ids_or_scope, users, **opts) do
103
+ belongs_to :organization
104
+ has_many :books do
105
+ has_one :author
106
+ has_many :chapters
107
+
108
+ has_many :reviews do
109
+ has_one :review_author
110
+ end
111
+ end
112
+
113
+ has_one :passport, foreign_key: :user_id, scope: user_passports
114
+ field :custom_field, scope: books.where(title: "1984")
115
+ end
116
+ end
117
+ end
118
+
119
+ class ReeDaoLoadAggTest::UsersAggAutoloadBooksChildren
120
+ include ReeDao::AggregateDSL
121
+
122
+ aggregate :users_agg_autoload_books_children do
123
+ link :users, from: :ree_dao_load_agg_test
124
+ link :books, from: :ree_dao_load_agg_test
125
+ link :chapters, from: :ree_dao_load_agg_test
126
+ link :authors, from: :ree_dao_load_agg_test
127
+ link :reviews, from: :ree_dao_load_agg_test
128
+ link :review_authors, from: :ree_dao_load_agg_test
129
+ link :load_agg, from: :ree_dao
130
+ end
131
+
132
+ def call(ids_or_scope, **opts)
133
+ load_agg(ids_or_scope, users, **opts) do
134
+ belongs_to :organization
135
+ has_many :books, autoload_children: true do
136
+ has_one :author
137
+ has_many :chapters
138
+
139
+ has_many :reviews do
140
+ has_one :review_author
141
+ end
142
+ end
143
+ end
144
+ end
145
+ end
146
+
147
+ class ReeDaoLoadAggTest::UsersAggAutoloadReviewsChildren
148
+ include ReeDao::AggregateDSL
149
+
150
+ aggregate :users_agg_autoload_reviews_children do
151
+ link :users, from: :ree_dao_load_agg_test
152
+ link :books, from: :ree_dao_load_agg_test
153
+ link :chapters, from: :ree_dao_load_agg_test
154
+ link :authors, from: :ree_dao_load_agg_test
155
+ link :reviews, from: :ree_dao_load_agg_test
156
+ link :review_authors, from: :ree_dao_load_agg_test
157
+ link :load_agg, from: :ree_dao
158
+ end
159
+
160
+ def call(ids_or_scope, **opts)
161
+ load_agg(ids_or_scope, users, **opts) do
162
+ belongs_to :organization
163
+ has_many :books do
164
+ has_one :author
165
+ has_many :chapters
166
+
167
+ has_many :reviews, autoload_children: true do
168
+ has_one :review_author
169
+ end
170
+ end
171
+ end
172
+ end
173
+ end
174
+
175
+ class ReeDaoLoadAggTest::UsersAggBlockTest
176
+ include ReeDao::AggregateDSL
177
+
178
+ aggregate :users_agg_block_test do
179
+ link :users, from: :ree_dao_load_agg_test
180
+ link :organizations, from: :ree_dao_load_agg_test
181
+ link :books, from: :ree_dao_load_agg_test
182
+ link :load_agg, from: :ree_dao
183
+ end
184
+
185
+ def call(ids_or_scope, **opts)
186
+ load_agg(ids_or_scope, users, **opts) do
187
+ belongs_to :organization
188
+ has_many :books, setter: -> (item, items_index) {
189
+ item.set_books([1337, 1337])
190
+ }
191
+ end
192
+ end
193
+ end
194
+
195
+ class ReeDaoLoadAggTest::UsersAggScopeMethodTest
196
+ include ReeDao::AggregateDSL
197
+
198
+ aggregate :users_agg_scope_method_test do
199
+ link :users, from: :ree_dao_load_agg_test
200
+ link :organizations, from: :ree_dao_load_agg_test
201
+ link :books, from: :ree_dao_load_agg_test
202
+ link :load_agg, from: :ree_dao
203
+ end
204
+
205
+ def call(ids_or_scope, **opts)
206
+ load_agg(ids_or_scope, users, **opts) do
207
+ title = "1984"
208
+ belongs_to :organization
209
+
210
+ has_many :books, scope: books_scope(title)
211
+ end
212
+ end
213
+
214
+ private
215
+
216
+ def books_scope(title)
217
+ books.where(title: title)
218
+ end
219
+ end
220
+
221
+ class ReeDaoLoadAggTest::UsersAggWithoutDao
222
+ include ReeDao::AggregateDSL
223
+
224
+ aggregate :users_agg_without_dao do
225
+ link :users, from: :ree_dao_load_agg_test
226
+ link :organizations, from: :ree_dao_load_agg_test
227
+ link :books, from: :ree_dao_load_agg_test
228
+ link :load_agg, from: :ree_dao
229
+ end
230
+
231
+ def call(ids_or_scope, **opts)
232
+ load_agg(ids_or_scope, users, **opts) do
233
+ has_many :something
234
+ end
235
+ end
236
+ end
237
+
238
+ let(:users_agg) { ReeDaoLoadAggTest::UsersAgg.new }
239
+ let(:users_agg_block) { ReeDaoLoadAggTest::UsersAggBlockTest.new }
240
+ let(:users_agg_scope_method) { ReeDaoLoadAggTest::UsersAggScopeMethodTest.new }
241
+ let(:users_agg_autoload_books_children) { ReeDaoLoadAggTest::UsersAggAutoloadBooksChildren.new }
242
+ let(:users_agg_autoload_reviews_children) { ReeDaoLoadAggTest::UsersAggAutoloadReviewsChildren.new }
243
+ let(:users_agg_without_dao) { ReeDaoLoadAggTest::UsersAggWithoutDao.new }
244
+ let(:organizations) { ReeDaoLoadAggTest::Organizations.new }
245
+ let(:users) { ReeDaoLoadAggTest::Users.new }
246
+ let(:user_passports) { ReeDaoLoadAggTest::UserPassports.new }
247
+ let(:books) { ReeDaoLoadAggTest::Books.new }
248
+ let(:chapters) { ReeDaoLoadAggTest::Chapters.new }
249
+ let(:authors) { ReeDaoLoadAggTest::Authors.new }
250
+ let(:reviews) { ReeDaoLoadAggTest::Reviews.new }
251
+ let(:review_authors) { ReeDaoLoadAggTest::ReviewAuthors.new }
252
+
253
+ it {
254
+ organizations.delete_all
255
+ users.delete_all
256
+
257
+ organization = ReeDaoLoadAggTest::Organization.new(name: "Test Org")
258
+ organizations.put(organization)
259
+
260
+ user = ReeDaoLoadAggTest::User.new(name: "John", age: 33, organization_id: organization.id)
261
+ users.put(user)
262
+
263
+ expect {
264
+ users_agg_without_dao.call(users.all)
265
+ }.to raise_error(ArgumentError)
266
+ }
267
+
268
+ it {
269
+ organizations.delete_all
270
+ users.delete_all
271
+ user_passports.delete_all
272
+ books.delete_all
273
+ chapters.delete_all
274
+
275
+ organization = ReeDaoLoadAggTest::Organization.new(name: "Test Org")
276
+ organizations.put(organization)
277
+
278
+ user_1 = ReeDaoLoadAggTest::User.new(name: "John", age: 33, organization_id: organization.id)
279
+ user_2 = ReeDaoLoadAggTest::User.new(name: "Sam", age: 21, organization_id: organization.id)
280
+ users.put(user_1)
281
+ users.put(user_2)
282
+
283
+ passport_1 = ReeDaoLoadAggTest::UserPassport.new(user_id: user_1.id, info: "some info")
284
+ user_passports.put(passport_1)
285
+ user_passports.put(ReeDaoLoadAggTest::UserPassport.new(user_id: user_2.id, info: "another info"))
286
+
287
+ book_1 = ReeDaoLoadAggTest::Book.new(user_id: user_1.id, title: "1984")
288
+ book_2 = ReeDaoLoadAggTest::Book.new(user_id: user_1.id, title: "1408")
289
+
290
+ books.put(book_1)
291
+ books.put(book_2)
292
+
293
+ chapter = ReeDaoLoadAggTest::Chapter.new(book_id: book_1.id, title: "beginning")
294
+ chapters.put(chapter)
295
+ chapters.put(ReeDaoLoadAggTest::Chapter.new(book_id: book_1.id, title: "interlude"))
296
+ chapters.put(ReeDaoLoadAggTest::Chapter.new(book_id: book_1.id, title: "tragic ending"))
297
+ chapters.put(ReeDaoLoadAggTest::Chapter.new(book_id: book_2.id, title: "beginning"))
298
+ chapters.put(ReeDaoLoadAggTest::Chapter.new(book_id: book_2.id, title: "ending"))
299
+
300
+
301
+ authors.put(ReeDaoLoadAggTest::Author.new(book_id: book_1.id, name: "George Orwell"))
302
+ review = ReeDaoLoadAggTest::Review.new(book_id: book_1.id, rating: 10)
303
+ reviews.put(review)
304
+ reviews.put(ReeDaoLoadAggTest::Review.new(book_id: book_1.id, rating: 7))
305
+ review_authors.put(ReeDaoLoadAggTest::ReviewAuthor.new(review_id: review.id, name: "John Review"))
306
+
307
+ res = users_agg.call(
308
+ users.all,
309
+ chapters: -> (scope) { scope.ids(chapter.id) }
310
+ )
311
+
312
+ res_user = res[0]
313
+ expect(res_user.id).to eq(user_1.id)
314
+ expect(res_user.organization).to eq(organization)
315
+ expect(res_user.passport).to eq(passport_1)
316
+ expect(res_user.passport.info).to eq("some info")
317
+ expect(res_user.books.count).to eq(2)
318
+ expect(res_user.books[0].author.name).to eq("George Orwell")
319
+ expect(res_user.books[0].chapters.map(&:title)).to eq(["beginning"])
320
+ expect(res_user.books[0].reviews[0].review_author.name).to eq("John Review")
321
+ expect(res_user.custom_field).to_not eq(nil)
322
+ }
323
+
324
+ it {
325
+ organizations.delete_all
326
+ users.delete_all
327
+ books.delete_all
328
+
329
+ organization = ReeDaoLoadAggTest::Organization.new(name: "Test Org")
330
+ organizations.put(organization)
331
+
332
+ user_1 = ReeDaoLoadAggTest::User.new(name: "John", age: 33, organization_id: organization.id)
333
+ user_2 = ReeDaoLoadAggTest::User.new(name: "Sam", age: 21, organization_id: organization.id)
334
+ users.put(user_1)
335
+ users.put(user_2)
336
+
337
+ book_1 = ReeDaoLoadAggTest::Book.new(user_id: user_1.id, title: "1984")
338
+ book_2 = ReeDaoLoadAggTest::Book.new(user_id: user_1.id, title: "1408")
339
+
340
+ books.put(book_1)
341
+ books.put(book_2)
342
+
343
+ res = users_agg_scope_method.call(users.all)
344
+
345
+ res_user = res[0]
346
+ expect(res_user.id).to eq(user_1.id)
347
+ expect(res_user.organization).to eq(organization)
348
+ expect(res_user.books.count).to eq(1)
349
+ }
350
+
351
+ it {
352
+ organizations.delete_all
353
+ users.delete_all
354
+ user_passports.delete_all
355
+ books.delete_all
356
+ chapters.delete_all
357
+
358
+ organization = ReeDaoLoadAggTest::Organization.new(name: "Test Org")
359
+ organizations.put(organization)
360
+
361
+ user_1 = ReeDaoLoadAggTest::User.new(name: "John", age: 33, organization_id: organization.id)
362
+ users.put(user_1)
363
+
364
+ book_1 = ReeDaoLoadAggTest::Book.new(user_id: user_1.id, title: "1984")
365
+ book_2 = ReeDaoLoadAggTest::Book.new(user_id: user_1.id, title: "1408")
366
+
367
+ books.put(book_1)
368
+ books.put(book_2)
369
+
370
+ chapters.put(ReeDaoLoadAggTest::Chapter.new(book_id: book_1.id, title: "beginning"))
371
+ chapters.put(ReeDaoLoadAggTest::Chapter.new(book_id: book_1.id, title: "interlude"))
372
+ chapters.put(ReeDaoLoadAggTest::Chapter.new(book_id: book_1.id, title: "tragic ending"))
373
+ chapters.put(ReeDaoLoadAggTest::Chapter.new(book_id: book_2.id, title: "beginning"))
374
+ chapters.put(ReeDaoLoadAggTest::Chapter.new(book_id: book_2.id, title: "ending"))
375
+
376
+ res = users_agg.call(
377
+ users.all,
378
+ only: [:books, :chapters]
379
+ )
380
+
381
+ u = res[0]
382
+ expect(u.books.count).to eq(2)
383
+ expect(u.books[0].chapters.count).to_not eq(0)
384
+ }
385
+
386
+ it {
387
+ organizations.delete_all
388
+ users.delete_all
389
+ user_passports.delete_all
390
+ books.delete_all
391
+ chapters.delete_all
392
+
393
+ organization = ReeDaoLoadAggTest::Organization.new(name: "Test Org")
394
+ organizations.put(organization)
395
+
396
+ user_1 = ReeDaoLoadAggTest::User.new(name: "John", age: 33, organization_id: organization.id)
397
+ users.put(user_1)
398
+
399
+ book_1 = ReeDaoLoadAggTest::Book.new(user_id: user_1.id, title: "1984")
400
+ book_2 = ReeDaoLoadAggTest::Book.new(user_id: user_1.id, title: "1408")
401
+
402
+ books.put(book_1)
403
+ books.put(book_2)
404
+
405
+ chapters.put(ReeDaoLoadAggTest::Chapter.new(book_id: book_1.id, title: "beginning"))
406
+ chapters.put(ReeDaoLoadAggTest::Chapter.new(book_id: book_1.id, title: "interlude"))
407
+ chapters.put(ReeDaoLoadAggTest::Chapter.new(book_id: book_1.id, title: "tragic ending"))
408
+ chapters.put(ReeDaoLoadAggTest::Chapter.new(book_id: book_2.id, title: "beginning"))
409
+ chapters.put(ReeDaoLoadAggTest::Chapter.new(book_id: book_2.id, title: "ending"))
410
+
411
+ res = users_agg.call(
412
+ users.all,
413
+ only: [:books, :chapters]
414
+ )
415
+
416
+ u = res[0]
417
+ expect(u.books.count).to eq(2)
418
+ expect(u.books[0].chapters.count).to_not eq(0)
419
+ }
420
+
421
+ it {
422
+ organizations.delete_all
423
+ users.delete_all
424
+ user_passports.delete_all
425
+ books.delete_all
426
+ chapters.delete_all
427
+
428
+ organization = ReeDaoLoadAggTest::Organization.new(name: "Test Org")
429
+ organizations.put(organization)
430
+
431
+ user = ReeDaoLoadAggTest::User.new(name: "John", age: 33, organization_id: organization.id)
432
+ users.put(user)
433
+
434
+ book = ReeDaoLoadAggTest::Book.new(user_id: user.id, title: "1984")
435
+ books.put(book)
436
+
437
+ chapters.put(ReeDaoLoadAggTest::Chapter.new(book_id: book.id, title: "beginning"))
438
+ chapters.put(ReeDaoLoadAggTest::Chapter.new(book_id: book.id, title: "interlude"))
439
+ chapters.put(ReeDaoLoadAggTest::Chapter.new(book_id: book.id, title: "tragic ending"))
440
+
441
+ authors.put(ReeDaoLoadAggTest::Author.new(book_id: book.id, name: "George Orwell"))
442
+
443
+ review = ReeDaoLoadAggTest::Review.new(book_id: book.id, rating: 5)
444
+ reviews.put(review)
445
+ review_authors.put(ReeDaoLoadAggTest::ReviewAuthor.new(review_id: review.id, name: "John"))
446
+
447
+ res = users_agg_autoload_books_children.call(
448
+ users.all,
449
+ only: [:books]
450
+ )
451
+
452
+ u = res[0]
453
+ expect(u.books).to_not eq(nil)
454
+ expect(u.books[0].chapters).to_not eq(nil)
455
+ expect(u.books[0].author).to_not eq(nil)
456
+ expect(u.books[0].reviews).to_not eq(nil)
457
+ expect(u.books[0].reviews[0].review_author).to eq(nil)
458
+ }
459
+
460
+ it {
461
+ organizations.delete_all
462
+ users.delete_all
463
+ user_passports.delete_all
464
+ books.delete_all
465
+ chapters.delete_all
466
+
467
+ organization = ReeDaoLoadAggTest::Organization.new(name: "Test Org")
468
+ organizations.put(organization)
469
+
470
+ user = ReeDaoLoadAggTest::User.new(name: "John", age: 33, organization_id: organization.id)
471
+ users.put(user)
472
+
473
+ book = ReeDaoLoadAggTest::Book.new(user_id: user.id, title: "1984")
474
+ books.put(book)
475
+
476
+ chapters.put(ReeDaoLoadAggTest::Chapter.new(book_id: book.id, title: "beginning"))
477
+ chapters.put(ReeDaoLoadAggTest::Chapter.new(book_id: book.id, title: "interlude"))
478
+ chapters.put(ReeDaoLoadAggTest::Chapter.new(book_id: book.id, title: "tragic ending"))
479
+
480
+ authors.put(ReeDaoLoadAggTest::Author.new(book_id: book.id, name: "George Orwell"))
481
+
482
+ review = ReeDaoLoadAggTest::Review.new(book_id: book.id, rating: 5)
483
+ reviews.put(review)
484
+ review_authors.put(ReeDaoLoadAggTest::ReviewAuthor.new(review_id: review.id, name: "John"))
485
+
486
+ res = users_agg_autoload_reviews_children.call(
487
+ users.all,
488
+ only: [:books, :reviews]
489
+ )
490
+
491
+ u = res[0]
492
+ expect(u.books).to_not eq(nil)
493
+ expect(u.books[0].chapters).to eq(nil)
494
+ expect(u.books[0].author).to eq(nil)
495
+ expect(u.books[0].reviews).to_not eq(nil)
496
+ expect(u.books[0].reviews[0].review_author).to_not eq(nil)
497
+ }
498
+
499
+ it {
500
+ organizations.delete_all
501
+ users.delete_all
502
+ user_passports.delete_all
503
+ books.delete_all
504
+
505
+ organization = ReeDaoLoadAggTest::Organization.new(name: "Test Org")
506
+ organizations.put(organization)
507
+
508
+ user_1 = ReeDaoLoadAggTest::User.new(name: "John", age: 33, organization_id: organization.id)
509
+ users.put(user_1)
510
+
511
+ book_1 = ReeDaoLoadAggTest::Book.new(user_id: user_1.id, title: "1984")
512
+
513
+ books.put(book_1)
514
+
515
+ res = users_agg_block.call(user_1.id)
516
+
517
+ u = res[0]
518
+ expect(u.books).to eq([1337, 1337])
519
+ }
520
+
521
+ it {
522
+ organizations.delete_all
523
+ users.delete_all
524
+ user_passports.delete_all
525
+ books.delete_all
526
+ chapters.delete_all
527
+
528
+ organization = ReeDaoLoadAggTest::Organization.new(name: "Test Org")
529
+ organizations.put(organization)
530
+
531
+ user_1 = ReeDaoLoadAggTest::User.new(name: "John", age: 33, organization_id: organization.id)
532
+ users.put(user_1)
533
+
534
+ book_1 = ReeDaoLoadAggTest::Book.new(user_id: user_1.id, title: "1984")
535
+ book_2 = ReeDaoLoadAggTest::Book.new(user_id: user_1.id, title: "1408")
536
+
537
+ books.put(book_1)
538
+ books.put(book_2)
539
+
540
+ chapters.put(ReeDaoLoadAggTest::Chapter.new(book_id: book_1.id, title: "beginning"))
541
+ chapters.put(ReeDaoLoadAggTest::Chapter.new(book_id: book_1.id, title: "interlude"))
542
+ chapters.put(ReeDaoLoadAggTest::Chapter.new(book_id: book_1.id, title: "tragic ending"))
543
+ chapters.put(ReeDaoLoadAggTest::Chapter.new(book_id: book_2.id, title: "beginning"))
544
+ chapters.put(ReeDaoLoadAggTest::Chapter.new(book_id: book_2.id, title: "ending"))
545
+
546
+ res = users_agg.call(
547
+ users.all,
548
+ except: [:organization, :passport, :custom_field]
549
+ )
550
+
551
+ u = res[0]
552
+ expect(u.books.count).to eq(2)
553
+ expect(u.passport).to eq(nil)
554
+ expect(u.organization).to eq(nil)
555
+ expect(u.custom_field).to eq(nil)
556
+ }
557
+
558
+ it {
559
+ organizations.delete_all
560
+ users.delete_all
561
+
562
+ organization = ReeDaoLoadAggTest::Organization.new(name: "Test Org")
563
+ organizations.put(organization)
564
+
565
+ user_1 = ReeDaoLoadAggTest::User.new(name: "John", age: 33, organization_id: organization.id)
566
+ user_2 = ReeDaoLoadAggTest::User.new(name: "Sam", age: 21, organization_id: organization.id)
567
+ users.put(user_1)
568
+ users.put(user_2)
569
+
570
+ ids = [user_1, user_2].map(&:id)
571
+
572
+ res = load_agg(ids, users)
573
+ expect(res.count).to eq(2)
574
+ }
575
+
576
+ it {
577
+ organizations.delete_all
578
+ users.delete_all
579
+
580
+ organization = ReeDaoLoadAggTest::Organization.new(name: "Test Org")
581
+ organizations.put(organization)
582
+
583
+ user_1 = ReeDaoLoadAggTest::User.new(name: "John", age: 33, organization_id: organization.id)
584
+ users.put(user_1)
585
+
586
+ res = load_agg(user_1.id, users)
587
+ expect(res.count).to eq(1)
588
+ }
589
+
590
+ it {
591
+ organizations.delete_all
592
+ users.delete_all
593
+
594
+ organization = ReeDaoLoadAggTest::Organization.new(name: "Test Org")
595
+ organizations.put(organization)
596
+
597
+ user_1 = ReeDaoLoadAggTest::User.new(name: "John", age: 33, organization_id: organization.id)
598
+ user_2 = ReeDaoLoadAggTest::User.new(name: "Sam", age: 21, organization_id: organization.id)
599
+ users.put(user_1)
600
+ users.put(user_2)
601
+
602
+ res = load_agg(users.where(organization_id: organization.id), users)
603
+ expect(res.count).to eq(2)
604
+ }
605
+ end