ree_lib 1.0.58 → 1.0.60

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: bdb25650f338b4be087e72a1ef04fff5b9e1bf47d0b22221ead03743c74de398
4
- data.tar.gz: 333d7adc841964ddd5b50d690f6c016b096622ba327953ae5a5fa57d50f7bde1
3
+ metadata.gz: 77d773db4104deb076fe0ea9d9aa6b8e0fd1218d71731e6d51a70a50be09d569
4
+ data.tar.gz: ac943abd83280ff44db19e50991e1ca51aa92cd1f140ccaa9e82cf706fc9dc8e
5
5
  SHA512:
6
- metadata.gz: 220bc20b778767ec025b5402e7f0fb5a32c2cd15b37373e26af20d5de11529a75b79c745fc9e062b5e27d0bf2c62e0438806aad79950498badebc5f980562825
7
- data.tar.gz: 375223a38b2016acb6d3bf9f45a01b6e286b95b32dcd2ab39fa2f90e4d1758bc12e3409333b9370a1b4c653c0ee6d6e5d1249891d93fbff159e5d8d2ad2dcf66
6
+ metadata.gz: 6eb4b4567e977e12c59f5246f819dcba9702ccb77fb5e776584f193f6cff18c14d4e7e40d75c0377b0fc905720936f0feb888e2e953b288466f7d777ed7bd633
7
+ data.tar.gz: 26ee7d50cf9e346c4cb9614832282d586d0ac767dcd0b65bdb056511ed2e3058f5d1186003e6f30b89a9a661768c7b7153e4d2a3f079185b441f9b7ca5582485
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- ree_lib (1.0.58)
4
+ ree_lib (1.0.60)
5
5
  binding_of_caller (~> 1.0.0)
6
6
  i18n (~> 1.12.0)
7
7
  loofah (~> 2.18.0)
@@ -160,32 +160,19 @@ module ReeDao
160
160
  root_ids = list.map(&:id).uniq
161
161
  else
162
162
  if !foreign_key
163
- dto_class = assoc_dao
164
- .opts[:schema_mapper]
165
- .dto(:db_load)
166
-
167
- name = underscore(demodulize(dto_class.name))
168
-
169
- root_ids = list.map(&:"#{"#{name}_id".to_sym}").uniq
170
- foreign_key = :id
171
- else
172
- root_ids = list.map(&:"#{foreign_key}")
173
- foreign_key = :id
163
+ foreign_key = :"#{assoc_name}_id"
174
164
  end
165
+
166
+ root_ids = list.map(&:"#{foreign_key}").compact
175
167
  end
176
168
 
177
- default_scope = if !scope
178
- assoc_dao&.where(foreign_key => root_ids)
179
- end
180
-
181
- items = add_scopes(default_scope, scope, global_opts[assoc_name])
169
+ scope ||= assoc_dao
170
+ scope = scope.where((reverse ? foreign_key : :id) => root_ids)
171
+
172
+ items = add_scopes(scope, global_opts[assoc_name])
182
173
  end
183
174
 
184
- assoc = if foreign_key
185
- index_by(items) { _1.send(foreign_key) }
186
- else
187
- items
188
- end
175
+ assoc = index_by(items) { _1.send(reverse ? foreign_key : :id) }
189
176
 
190
177
  populate_association(
191
178
  list,
@@ -224,11 +211,10 @@ module ReeDao
224
211
 
225
212
  root_ids = list.map(&:"#{primary_key}")
226
213
 
227
- default_scope = if !scope
228
- assoc_dao&.where(foreign_key => root_ids)
229
- end
214
+ scope ||= assoc_dao
215
+ scope = scope.where(foreign_key => root_ids)
230
216
 
231
- items = add_scopes(default_scope, scope, global_opts[assoc_name])
217
+ items = add_scopes(scope, global_opts[assoc_name])
232
218
  end
233
219
 
234
220
  assoc = if foreign_key
@@ -242,7 +228,8 @@ module ReeDao
242
228
  assoc,
243
229
  assoc_name,
244
230
  setter: setter,
245
- primary_key: primary_key
231
+ primary_key: primary_key,
232
+ multiple: true
246
233
  )
247
234
 
248
235
  assoc
@@ -255,10 +242,11 @@ module ReeDao
255
242
  Kwargs[
256
243
  primary_key: Nilor[Symbol],
257
244
  reverse: Nilor[Bool],
258
- setter: Nilor[Or[Symbol, Proc]]
245
+ setter: Nilor[Or[Symbol, Proc]],
246
+ multiple: Bool
259
247
  ] => Any
260
248
  )
261
- def populate_association(list, association_index, assoc_name, primary_key: nil, reverse: nil, setter: nil)
249
+ def populate_association(list, association_index, assoc_name, primary_key: nil, reverse: nil, setter: nil, multiple: false)
262
250
  assoc_setter = if setter
263
251
  setter
264
252
  else
@@ -275,7 +263,8 @@ module ReeDao
275
263
  reverse ? primary_key : "#{assoc_name}_id"
276
264
  end
277
265
  value = association_index[item.send(key)]
278
- next if value.nil?
266
+
267
+ value = [] if value.nil? && multiple
279
268
 
280
269
  begin
281
270
  item.send(assoc_setter, value)
@@ -286,12 +275,12 @@ module ReeDao
286
275
  end
287
276
  end
288
277
 
289
- contract(Nilor[Sequel::Dataset], Nilor[Sequel::Dataset], Nilor[Proc] => Array)
290
- def add_scopes(default_scope, scope, named_scope)
291
- res = scope || default_scope
292
-
293
- if named_scope
294
- res = named_scope.call(res)
278
+ contract(Nilor[Sequel::Dataset], Nilor[Proc] => Array)
279
+ def add_scopes(scope, named_scope)
280
+ res = if named_scope
281
+ named_scope.call(scope)
282
+ else
283
+ scope
295
284
  end
296
285
 
297
286
  res.all
@@ -278,6 +278,7 @@ RSpec.describe :load_agg do
278
278
  belongs_to :organization
279
279
 
280
280
  has_many :books, -> { books_opts(title) }
281
+ has_many :active_books, books
281
282
  end
282
283
  end
283
284
 
@@ -465,6 +466,88 @@ RSpec.describe :load_agg do
465
466
  expect(res_user.custom_field).to_not eq(nil)
466
467
  }
467
468
 
469
+ it {
470
+ organizations.delete_all
471
+ users.delete_all
472
+ user_passports.delete_all
473
+ books.delete_all
474
+ chapters.delete_all
475
+
476
+ organization = ReeDaoLoadAggTest::Organization.new(name: "Test Org")
477
+ organizations.put(organization)
478
+
479
+ user_1 = ReeDaoLoadAggTest::User.new(name: "John", age: 33, organization_id: organization.id)
480
+ user_2 = ReeDaoLoadAggTest::User.new(name: "Sam", age: 21, organization_id: organization.id)
481
+ users.put(user_1)
482
+ users.put(user_2)
483
+
484
+ book_1 = ReeDaoLoadAggTest::Book.new(user_id: user_1.id, title: "1984")
485
+ book_2 = ReeDaoLoadAggTest::Book.new(user_id: user_1.id, title: "1408")
486
+
487
+ books.put(book_1)
488
+ books.put(book_2)
489
+
490
+ author_1 = ReeDaoLoadAggTest::Author.new(book_id: book_1.id, name: "George Orwell")
491
+ author_2 = ReeDaoLoadAggTest::Author.new(book_id: book_2.id, name: "Stephen King")
492
+ authors.put(author_1)
493
+ authors.put(author_2)
494
+
495
+ res = users_agg.call(
496
+ users.all
497
+ )
498
+
499
+ expect(res[0].books.first.author).to_not eq(nil)
500
+
501
+ authors.delete(author_1)
502
+ authors.delete(author_2)
503
+
504
+ res = users_agg.call(
505
+ users.all
506
+ )
507
+
508
+ expect(res[0].books[0].author).to eq(nil)
509
+ expect(res[0].books[1].author).to eq(nil)
510
+ }
511
+
512
+ it {
513
+ organizations.delete_all
514
+ users.delete_all
515
+ user_passports.delete_all
516
+ books.delete_all
517
+ chapters.delete_all
518
+
519
+ organization = ReeDaoLoadAggTest::Organization.new(name: "Test Org")
520
+ organizations.put(organization)
521
+
522
+ user_1 = ReeDaoLoadAggTest::User.new(name: "John", age: 33, organization_id: organization.id)
523
+ user_2 = ReeDaoLoadAggTest::User.new(name: "Sam", age: 21, organization_id: organization.id)
524
+ users.put(user_1)
525
+ users.put(user_2)
526
+
527
+ book_1 = ReeDaoLoadAggTest::Book.new(user_id: user_1.id, title: "1984")
528
+ book_2 = ReeDaoLoadAggTest::Book.new(user_id: user_1.id, title: "1408")
529
+
530
+ books.put(book_1)
531
+ books.put(book_2)
532
+
533
+ res = users_agg.call(
534
+ users.all
535
+ )
536
+
537
+ expect(res[0].books).to_not eq([])
538
+ expect(res[1].books).to eq([])
539
+
540
+ books.delete(book_1)
541
+ books.delete(book_2)
542
+
543
+ res = users_agg.call(
544
+ users.all
545
+ )
546
+
547
+ expect(res[0].books).to eq([])
548
+ expect(res[1].books).to eq([])
549
+ }
550
+
468
551
  it {
469
552
  organizations.delete_all
470
553
  users.delete_all
@@ -490,6 +573,7 @@ RSpec.describe :load_agg do
490
573
  expect(res_user.id).to eq(user_1.id)
491
574
  expect(res_user.organization).to eq(organization)
492
575
  expect(res_user.books.count).to eq(1)
576
+ expect(res_user.active_books.count).to eq(2)
493
577
  }
494
578
 
495
579
  it {
@@ -105,6 +105,14 @@ class ReeDaoLoadAggTest::User
105
105
  @books
106
106
  end
107
107
 
108
+ def set_active_books(books)
109
+ @active_books = books
110
+ end
111
+
112
+ def active_books
113
+ @active_books
114
+ end
115
+
108
116
  contract(ArrayOf[ReeDaoLoadAggTest::Book] => nil)
109
117
  def set_books(books)
110
118
  @books = books; nil
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ReeLib
4
- VERSION = "1.0.58"
4
+ VERSION = "1.0.60"
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ree_lib
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.58
4
+ version: 1.0.60
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ruslan Gatiyatov