bullet 6.0.2 → 7.0.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (63) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/main.yml +82 -0
  3. data/CHANGELOG.md +52 -0
  4. data/Gemfile.rails-6.0 +1 -1
  5. data/Gemfile.rails-6.1 +15 -0
  6. data/Gemfile.rails-7.0 +10 -0
  7. data/README.md +39 -25
  8. data/lib/bullet/active_job.rb +1 -3
  9. data/lib/bullet/active_record4.rb +9 -23
  10. data/lib/bullet/active_record41.rb +8 -19
  11. data/lib/bullet/active_record42.rb +9 -16
  12. data/lib/bullet/active_record5.rb +188 -170
  13. data/lib/bullet/active_record52.rb +182 -162
  14. data/lib/bullet/active_record60.rb +191 -178
  15. data/lib/bullet/active_record61.rb +272 -0
  16. data/lib/bullet/active_record70.rb +275 -0
  17. data/lib/bullet/bullet_xhr.js +18 -23
  18. data/lib/bullet/dependency.rb +52 -34
  19. data/lib/bullet/detector/association.rb +24 -18
  20. data/lib/bullet/detector/counter_cache.rb +12 -8
  21. data/lib/bullet/detector/n_plus_one_query.rb +20 -10
  22. data/lib/bullet/detector/unused_eager_loading.rb +7 -4
  23. data/lib/bullet/mongoid4x.rb +3 -7
  24. data/lib/bullet/mongoid5x.rb +3 -7
  25. data/lib/bullet/mongoid6x.rb +3 -7
  26. data/lib/bullet/mongoid7x.rb +26 -13
  27. data/lib/bullet/notification/base.rb +14 -18
  28. data/lib/bullet/notification/n_plus_one_query.rb +2 -4
  29. data/lib/bullet/notification/unused_eager_loading.rb +2 -4
  30. data/lib/bullet/notification.rb +2 -1
  31. data/lib/bullet/rack.rb +28 -17
  32. data/lib/bullet/stack_trace_filter.rb +10 -17
  33. data/lib/bullet/version.rb +1 -1
  34. data/lib/bullet.rb +52 -42
  35. data/lib/generators/bullet/install_generator.rb +22 -23
  36. data/perf/benchmark.rb +11 -14
  37. data/spec/bullet/detector/counter_cache_spec.rb +6 -6
  38. data/spec/bullet/detector/n_plus_one_query_spec.rb +8 -4
  39. data/spec/bullet/detector/unused_eager_loading_spec.rb +25 -8
  40. data/spec/bullet/ext/object_spec.rb +1 -1
  41. data/spec/bullet/notification/base_spec.rb +5 -7
  42. data/spec/bullet/notification/n_plus_one_query_spec.rb +16 -3
  43. data/spec/bullet/notification/unused_eager_loading_spec.rb +5 -1
  44. data/spec/bullet/rack_spec.rb +154 -13
  45. data/spec/bullet/registry/association_spec.rb +2 -2
  46. data/spec/bullet/registry/base_spec.rb +1 -1
  47. data/spec/bullet_spec.rb +25 -44
  48. data/spec/integration/active_record/association_spec.rb +104 -130
  49. data/spec/integration/counter_cache_spec.rb +14 -34
  50. data/spec/integration/mongoid/association_spec.rb +19 -33
  51. data/spec/models/attachment.rb +5 -0
  52. data/spec/models/deal.rb +5 -0
  53. data/spec/models/post.rb +2 -0
  54. data/spec/models/role.rb +7 -0
  55. data/spec/models/submission.rb +1 -0
  56. data/spec/models/user.rb +2 -0
  57. data/spec/spec_helper.rb +4 -10
  58. data/spec/support/bullet_ext.rb +8 -9
  59. data/spec/support/mongo_seed.rb +3 -16
  60. data/spec/support/sqlite_seed.rb +38 -0
  61. data/test.sh +2 -0
  62. metadata +17 -7
  63. data/.travis.yml +0 -31
@@ -6,9 +6,7 @@ if active_record?
6
6
  describe Bullet::Detector::Association, 'has_many' do
7
7
  context 'post => comments' do
8
8
  it 'should detect non preload post => comments' do
9
- Post.all.each do |post|
10
- post.comments.map(&:name)
11
- end
9
+ Post.all.each { |post| post.comments.map(&:name) }
12
10
  Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
13
11
  expect(Bullet::Detector::Association).not_to be_has_unused_preload_associations
14
12
 
@@ -16,9 +14,7 @@ if active_record?
16
14
  end
17
15
 
18
16
  it 'should detect non preload post => comments for find_by_sql' do
19
- Post.find_by_sql('SELECT * FROM posts').each do |post|
20
- post.comments.map(&:name)
21
- end
17
+ Post.find_by_sql('SELECT * FROM posts').each { |post| post.comments.map(&:name) }
22
18
  Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
23
19
  expect(Bullet::Detector::Association).not_to be_has_unused_preload_associations
24
20
 
@@ -26,9 +22,7 @@ if active_record?
26
22
  end
27
23
 
28
24
  it 'should detect preload with post => comments' do
29
- Post.includes(:comments).each do |post|
30
- post.comments.map(&:name)
31
- end
25
+ Post.includes(:comments).each { |post| post.comments.map(&:name) }
32
26
  Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
33
27
  expect(Bullet::Detector::Association).not_to be_has_unused_preload_associations
34
28
 
@@ -65,9 +59,7 @@ if active_record?
65
59
  end
66
60
 
67
61
  it 'should detect non preload post => comments with empty?' do
68
- Post.all.each do |post|
69
- post.comments.empty?
70
- end
62
+ Post.all.each { |post| post.comments.empty? }
71
63
  Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
72
64
  expect(Bullet::Detector::Association).not_to be_has_unused_preload_associations
73
65
 
@@ -76,9 +68,7 @@ if active_record?
76
68
 
77
69
  it 'should detect non preload post => comments with include?' do
78
70
  comment = Comment.last
79
- Post.all.each do |post|
80
- post.comments.include?(comment)
81
- end
71
+ Post.all.each { |post| post.comments.include?(comment) }
82
72
  Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
83
73
  expect(Bullet::Detector::Association).not_to be_has_unused_preload_associations
84
74
 
@@ -86,9 +76,7 @@ if active_record?
86
76
  end
87
77
 
88
78
  it 'should not detect unused preload person => pets with empty?' do
89
- Person.all.each do |person|
90
- person.pets.empty?
91
- end
79
+ Person.all.each { |person| person.pets.empty? }
92
80
  Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
93
81
  expect(Bullet::Detector::Association).not_to be_has_unused_preload_associations
94
82
 
@@ -98,11 +86,7 @@ if active_record?
98
86
 
99
87
  context 'category => posts => comments' do
100
88
  it 'should detect non preload category => posts => comments' do
101
- Category.all.each do |category|
102
- category.posts.each do |post|
103
- post.comments.map(&:name)
104
- end
105
- end
89
+ Category.all.each { |category| category.posts.each { |post| post.comments.map(&:name) } }
106
90
  Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
107
91
  expect(Bullet::Detector::Association).not_to be_has_unused_preload_associations
108
92
 
@@ -111,11 +95,7 @@ if active_record?
111
95
  end
112
96
 
113
97
  it 'should detect preload category => posts, but no post => comments' do
114
- Category.includes(:posts).each do |category|
115
- category.posts.each do |post|
116
- post.comments.map(&:name)
117
- end
118
- end
98
+ Category.includes(:posts).each { |category| category.posts.each { |post| post.comments.map(&:name) } }
119
99
  Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
120
100
  expect(Bullet::Detector::Association).not_to be_has_unused_preload_associations
121
101
 
@@ -124,11 +104,7 @@ if active_record?
124
104
  end
125
105
 
126
106
  it 'should detect preload with category => posts => comments' do
127
- Category.includes(posts: :comments).each do |category|
128
- category.posts.each do |post|
129
- post.comments.map(&:name)
130
- end
131
- end
107
+ Category.includes(posts: :comments).each { |category| category.posts.each { |post| post.comments.map(&:name) } }
132
108
  Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
133
109
  expect(Bullet::Detector::Association).not_to be_has_unused_preload_associations
134
110
 
@@ -137,9 +113,7 @@ if active_record?
137
113
 
138
114
  it 'should detect preload with category => posts => comments with posts.id > 0' do
139
115
  Category.includes(posts: :comments).where('posts.id > 0').references(:posts).each do |category|
140
- category.posts.each do |post|
141
- post.comments.map(&:name)
142
- end
116
+ category.posts.each { |post| post.comments.map(&:name) }
143
117
  end
144
118
  Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
145
119
  expect(Bullet::Detector::Association).not_to be_has_unused_preload_associations
@@ -155,10 +129,8 @@ if active_record?
155
129
  expect(Bullet::Detector::Association).to be_completely_preloading_associations
156
130
  end
157
131
 
158
- it 'should detect unused preload with post => commnets, no category => posts' do
159
- Category.includes(posts: :comments).each do |category|
160
- category.posts.map(&:name)
161
- end
132
+ it 'should detect unused preload with post => comments, no category => posts' do
133
+ Category.includes(posts: :comments).each { |category| category.posts.map(&:name) }
162
134
  Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
163
135
  expect(Bullet::Detector::Association).to be_unused_preload_associations_for(Post, :comments)
164
136
 
@@ -212,9 +184,7 @@ if active_record?
212
184
  end
213
185
 
214
186
  it 'should detect unused preload with category => entries, but not with category => posts' do
215
- Category.includes(%i[posts entries]).each do |category|
216
- category.posts.map(&:name)
217
- end
187
+ Category.includes(%i[posts entries]).each { |category| category.posts.map(&:name) }
218
188
  Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
219
189
  expect(Bullet::Detector::Association).not_to be_unused_preload_associations_for(Category, :posts)
220
190
  expect(Bullet::Detector::Association).to be_unused_preload_associations_for(Category, :entries)
@@ -225,16 +195,14 @@ if active_record?
225
195
 
226
196
  context 'post => comment' do
227
197
  it 'should detect unused preload with post => comments' do
228
- Post.includes(:comments).each do |post|
229
- post.comments.first&.name
230
- end
198
+ Post.includes(:comments).each { |post| post.comments.first&.name }
231
199
  Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
232
200
  expect(Bullet::Detector::Association).not_to be_unused_preload_associations_for(Post, :comments)
233
201
 
234
202
  expect(Bullet::Detector::Association).to be_completely_preloading_associations
235
203
  end
236
204
 
237
- it 'should detect preload with post => commnets' do
205
+ it 'should detect preload with post => comments' do
238
206
  Post.first.comments.map(&:name)
239
207
  Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
240
208
  expect(Bullet::Detector::Association).not_to be_has_unused_preload_associations
@@ -272,9 +240,7 @@ if active_record?
272
240
 
273
241
  context 'scope for_category_name' do
274
242
  it 'should detect preload with post => category' do
275
- Post.in_category_name('first').references(:categories).each do |post|
276
- post.category.name
277
- end
243
+ Post.in_category_name('first').references(:categories).each { |post| post.category.name }
278
244
  Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
279
245
  expect(Bullet::Detector::Association).not_to be_has_unused_preload_associations
280
246
 
@@ -292,9 +258,7 @@ if active_record?
292
258
 
293
259
  context 'scope preload_comments' do
294
260
  it 'should detect preload post => comments with scope' do
295
- Post.preload_comments.each do |post|
296
- post.comments.map(&:name)
297
- end
261
+ Post.preload_comments.each { |post| post.comments.map(&:name) }
298
262
  Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
299
263
  expect(Bullet::Detector::Association).not_to be_has_unused_preload_associations
300
264
 
@@ -314,9 +278,7 @@ if active_record?
314
278
  describe Bullet::Detector::Association, 'belongs_to' do
315
279
  context 'comment => post' do
316
280
  it 'should detect non preload with comment => post' do
317
- Comment.all.each do |comment|
318
- comment.post.name
319
- end
281
+ Comment.all.each { |comment| comment.post.name }
320
282
  Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
321
283
  expect(Bullet::Detector::Association).not_to be_has_unused_preload_associations
322
284
 
@@ -332,9 +294,7 @@ if active_record?
332
294
  end
333
295
 
334
296
  it 'should detect preload with comment => post' do
335
- Comment.includes(:post).each do |comment|
336
- comment.post.name
337
- end
297
+ Comment.includes(:post).each { |comment| comment.post.name }
338
298
  Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
339
299
  expect(Bullet::Detector::Association).not_to be_has_unused_preload_associations
340
300
 
@@ -371,9 +331,7 @@ if active_record?
371
331
 
372
332
  context 'comment => post => category' do
373
333
  it 'should detect non preload association with comment => post' do
374
- Comment.all.each do |comment|
375
- comment.post.category.name
376
- end
334
+ Comment.all.each { |comment| comment.post.category.name }
377
335
  Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
378
336
  expect(Bullet::Detector::Association).not_to be_has_unused_preload_associations
379
337
 
@@ -390,9 +348,7 @@ if active_record?
390
348
  end
391
349
 
392
350
  it 'should detect non preload association with post => category' do
393
- Comment.includes(:post).each do |comment|
394
- comment.post.category.name
395
- end
351
+ Comment.includes(:post).each { |comment| comment.post.category.name }
396
352
  Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
397
353
  expect(Bullet::Detector::Association).not_to be_has_unused_preload_associations
398
354
 
@@ -400,9 +356,7 @@ if active_record?
400
356
  end
401
357
 
402
358
  it 'should not detect unpreload association' do
403
- Comment.includes(post: :category).each do |comment|
404
- comment.post.category.name
405
- end
359
+ Comment.includes(post: :category).each { |comment| comment.post.category.name }
406
360
  Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
407
361
  expect(Bullet::Detector::Association).not_to be_has_unused_preload_associations
408
362
 
@@ -412,9 +366,8 @@ if active_record?
412
366
 
413
367
  context 'comment => author, post => writer' do
414
368
  it 'should detect non preloaded writer' do
415
- Comment.includes(%i[author post]).where(['base_users.id = ?', BaseUser.first]).references(:base_users).each do |comment|
416
- comment.post.writer.name
417
- end
369
+ Comment.includes(%i[author post]).where(['base_users.id = ?', BaseUser.first]).references(:base_users)
370
+ .each { |comment| comment.post.writer.name }
418
371
  Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
419
372
  expect(Bullet::Detector::Association).not_to be_has_unused_preload_associations
420
373
 
@@ -422,9 +375,9 @@ if active_record?
422
375
  end
423
376
 
424
377
  it 'should detect unused preload with comment => author' do
425
- Comment.includes([:author, { post: :writer }]).where(['base_users.id = ?', BaseUser.first]).references(:base_users).each do |comment|
426
- comment.post.writer.name
427
- end
378
+ Comment.includes([:author, { post: :writer }]).where(['base_users.id = ?', BaseUser.first]).references(
379
+ :base_users
380
+ ).each { |comment| comment.post.writer.name }
428
381
  Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
429
382
  expect(Bullet::Detector::Association).not_to be_has_unused_preload_associations
430
383
 
@@ -442,21 +395,24 @@ if active_record?
442
395
  end
443
396
 
444
397
  it 'should not raise a stack error from posts to category' do
445
- expect {
446
- Comment.includes(post: :category).each do |com|
447
- com.post.category
448
- end
449
- }.not_to raise_error
398
+ expect { Comment.includes(post: :category).each { |com| com.post.category } }.not_to raise_error
450
399
  end
451
400
  end
452
401
  end
453
402
 
454
403
  describe Bullet::Detector::Association, 'has_and_belongs_to_many' do
404
+ context 'posts <=> deals' do
405
+ it 'should detect preload associations with join tables that have identifier' do
406
+ Post.includes(:deals).each { |post| post.deals.map(&:name) }
407
+ Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
408
+ expect(Bullet::Detector::Association).not_to be_has_unused_preload_associations
409
+
410
+ expect(Bullet::Detector::Association).to be_completely_preloading_associations
411
+ end
412
+ end
455
413
  context 'students <=> teachers' do
456
414
  it 'should detect non preload associations' do
457
- Student.all.each do |student|
458
- student.teachers.map(&:name)
459
- end
415
+ Student.all.each { |student| student.teachers.map(&:name) }
460
416
  Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
461
417
  expect(Bullet::Detector::Association).not_to be_has_unused_preload_associations
462
418
 
@@ -464,9 +420,7 @@ if active_record?
464
420
  end
465
421
 
466
422
  it 'should detect preload associations' do
467
- Student.includes(:teachers).each do |student|
468
- student.teachers.map(&:name)
469
- end
423
+ Student.includes(:teachers).each { |student| student.teachers.map(&:name) }
470
424
  Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
471
425
  expect(Bullet::Detector::Association).not_to be_has_unused_preload_associations
472
426
 
@@ -490,23 +444,29 @@ if active_record?
490
444
  end
491
445
 
492
446
  it 'should detect non preload student => teachers with empty?' do
493
- Student.all.each do |student|
494
- student.teachers.empty?
495
- end
447
+ Student.all.each { |student| student.teachers.empty? }
496
448
  Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
497
449
  expect(Bullet::Detector::Association).not_to be_has_unused_preload_associations
498
450
 
499
451
  expect(Bullet::Detector::Association).to be_detecting_unpreloaded_association_for(Student, :teachers)
500
452
  end
501
453
  end
454
+
455
+ context 'user => roles' do
456
+ it 'should detect preload associations' do
457
+ User.first.roles.includes(:resource).each { |role| role.resource }
458
+ Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
459
+ expect(Bullet::Detector::Association).not_to be_has_unused_preload_associations
460
+
461
+ expect(Bullet::Detector::Association).to be_completely_preloading_associations
462
+ end
463
+ end
502
464
  end
503
465
 
504
466
  describe Bullet::Detector::Association, 'has_many :through' do
505
467
  context 'firm => clients' do
506
468
  it 'should detect non preload associations' do
507
- Firm.all.each do |firm|
508
- firm.clients.map(&:name)
509
- end
469
+ Firm.all.each { |firm| firm.clients.map(&:name) }
510
470
  Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
511
471
  expect(Bullet::Detector::Association).not_to be_has_unused_preload_associations
512
472
 
@@ -514,9 +474,7 @@ if active_record?
514
474
  end
515
475
 
516
476
  it 'should detect preload associations' do
517
- Firm.includes(:clients).each do |firm|
518
- firm.clients.map(&:name)
519
- end
477
+ Firm.includes(:clients).each { |firm| firm.clients.map(&:name) }
520
478
  Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
521
479
  expect(Bullet::Detector::Association).not_to be_has_unused_preload_associations
522
480
 
@@ -542,9 +500,7 @@ if active_record?
542
500
 
543
501
  context 'firm => clients => groups' do
544
502
  it 'should detect non preload associations' do
545
- Firm.all.each do |firm|
546
- firm.groups.map(&:name)
547
- end
503
+ Firm.all.each { |firm| firm.groups.map(&:name) }
548
504
  Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
549
505
  expect(Bullet::Detector::Association).not_to be_has_unused_preload_associations
550
506
 
@@ -552,9 +508,7 @@ if active_record?
552
508
  end
553
509
 
554
510
  it 'should detect preload associations' do
555
- Firm.includes(:groups).each do |firm|
556
- firm.groups.map(&:name)
557
- end
511
+ Firm.includes(:groups).each { |firm| firm.groups.map(&:name) }
558
512
  Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
559
513
  expect(Bullet::Detector::Association).not_to be_has_unused_preload_associations
560
514
 
@@ -582,9 +536,7 @@ if active_record?
582
536
  describe Bullet::Detector::Association, 'has_one' do
583
537
  context 'company => address' do
584
538
  it 'should detect non preload association' do
585
- Company.all.each do |company|
586
- company.address.name
587
- end
539
+ Company.all.each { |company| company.address.name }
588
540
  Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
589
541
  expect(Bullet::Detector::Association).not_to be_has_unused_preload_associations
590
542
 
@@ -592,9 +544,7 @@ if active_record?
592
544
  end
593
545
 
594
546
  it 'should detect preload association' do
595
- Company.includes(:address).each do |company|
596
- company.address.name
597
- end
547
+ Company.includes(:address).each { |company| company.address.name }
598
548
  Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
599
549
  expect(Bullet::Detector::Association).not_to be_has_unused_preload_associations
600
550
 
@@ -630,6 +580,42 @@ if active_record?
630
580
  end
631
581
  end
632
582
 
583
+ describe Bullet::Detector::Association, 'has_one :through' do
584
+ context 'user => attachment' do
585
+ it 'should detect non preload associations' do
586
+ User.all.each { |user| user.submission_attachment.file_name }
587
+ Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
588
+ expect(Bullet::Detector::Association).not_to be_has_unused_preload_associations
589
+
590
+ expect(Bullet::Detector::Association).to be_detecting_unpreloaded_association_for(User, :submission_attachment)
591
+ end
592
+
593
+ it 'should detect preload associations' do
594
+ User.includes(:submission_attachment).each { |user| user.submission_attachment.file_name }
595
+ Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
596
+ expect(Bullet::Detector::Association).not_to be_has_unused_preload_associations
597
+
598
+ expect(Bullet::Detector::Association).to be_completely_preloading_associations
599
+ end
600
+
601
+ it 'should not detect preload associations' do
602
+ User.all.map(&:name)
603
+ Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
604
+ expect(Bullet::Detector::Association).not_to be_has_unused_preload_associations
605
+
606
+ expect(Bullet::Detector::Association).to be_completely_preloading_associations
607
+ end
608
+
609
+ it 'should detect unused preload associations' do
610
+ User.includes(:submission_attachment).map(&:name)
611
+ Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
612
+ expect(Bullet::Detector::Association).to be_unused_preload_associations_for(User, :submission_attachment)
613
+
614
+ expect(Bullet::Detector::Association).to be_completely_preloading_associations
615
+ end
616
+ end
617
+ end
618
+
633
619
  describe Bullet::Detector::Association, 'call one association that in possible objects' do
634
620
  it 'should not detect preload association' do
635
621
  Post.all
@@ -688,9 +674,7 @@ if active_record?
688
674
  describe Bullet::Detector::Association, 'STI' do
689
675
  context 'page => author' do
690
676
  it 'should detect non preload associations' do
691
- Page.all.each do |page|
692
- page.author.name
693
- end
677
+ Page.all.each { |page| page.author.name }
694
678
  Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
695
679
  expect(Bullet::Detector::Association).not_to be_has_unused_preload_associations
696
680
 
@@ -698,9 +682,7 @@ if active_record?
698
682
  end
699
683
 
700
684
  it 'should detect preload associations' do
701
- Page.includes(:author).each do |page|
702
- page.author.name
703
- end
685
+ Page.includes(:author).each { |page| page.author.name }
704
686
  Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
705
687
  expect(Bullet::Detector::Association).not_to be_has_unused_preload_associations
706
688
 
@@ -729,9 +711,7 @@ if active_record?
729
711
  after { Bullet.n_plus_one_query_enable = true }
730
712
 
731
713
  it 'should not detect n plus one query' do
732
- Post.all.each do |post|
733
- post.comments.map(&:name)
734
- end
714
+ Post.all.each { |post| post.comments.map(&:name) }
735
715
  Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
736
716
 
737
717
  expect(Bullet::Detector::Association).not_to be_detecting_unpreloaded_association_for(Post, :comments)
@@ -760,9 +740,7 @@ if active_record?
760
740
  end
761
741
 
762
742
  it 'should still detect n plus one query' do
763
- Post.all.each do |post|
764
- post.comments.map(&:name)
765
- end
743
+ Post.all.each { |post| post.comments.map(&:name) }
766
744
  Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
767
745
 
768
746
  expect(Bullet::Detector::Association).to be_detecting_unpreloaded_association_for(Post, :comments)
@@ -770,14 +748,12 @@ if active_record?
770
748
  end
771
749
  end
772
750
 
773
- context 'whitelist n plus one query' do
774
- before { Bullet.add_whitelist type: :n_plus_one_query, class_name: 'Post', association: :comments }
775
- after { Bullet.clear_whitelist }
751
+ context 'add n plus one query to safelist' do
752
+ before { Bullet.add_safelist type: :n_plus_one_query, class_name: 'Post', association: :comments }
753
+ after { Bullet.clear_safelist }
776
754
 
777
755
  it 'should not detect n plus one query' do
778
- Post.all.each do |post|
779
- post.comments.map(&:name)
780
- end
756
+ Post.all.each { |post| post.comments.map(&:name) }
781
757
  Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
782
758
 
783
759
  expect(Bullet::Detector::Association).not_to be_detecting_unpreloaded_association_for(Post, :comments)
@@ -793,9 +769,9 @@ if active_record?
793
769
  end
794
770
  end
795
771
 
796
- context 'whitelist unused eager loading' do
797
- before { Bullet.add_whitelist type: :unused_eager_loading, class_name: 'Post', association: :comments }
798
- after { Bullet.clear_whitelist }
772
+ context 'add unused eager loading to safelist' do
773
+ before { Bullet.add_safelist type: :unused_eager_loading, class_name: 'Post', association: :comments }
774
+ after { Bullet.clear_safelist }
799
775
 
800
776
  it 'should not detect unused eager loading' do
801
777
  Post.includes(:comments).map(&:name)
@@ -806,9 +782,7 @@ if active_record?
806
782
  end
807
783
 
808
784
  it 'should still detect n plus one query' do
809
- Post.all.each do |post|
810
- post.comments.map(&:name)
811
- end
785
+ Post.all.each { |post| post.comments.map(&:name) }
812
786
  Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
813
787
 
814
788
  expect(Bullet::Detector::Association).to be_detecting_unpreloaded_association_for(Post, :comments)
@@ -4,25 +4,17 @@ require 'spec_helper'
4
4
 
5
5
  if !mongoid? && active_record?
6
6
  describe Bullet::Detector::CounterCache do
7
- before(:each) do
8
- Bullet.start_request
9
- end
7
+ before(:each) { Bullet.start_request }
10
8
 
11
- after(:each) do
12
- Bullet.end_request
13
- end
9
+ after(:each) { Bullet.end_request }
14
10
 
15
11
  it 'should need counter cache with all cities' do
16
- Country.all.each do |country|
17
- country.cities.size
18
- end
12
+ Country.all.each { |country| country.cities.size }
19
13
  expect(Bullet.collected_counter_cache_notifications).not_to be_empty
20
14
  end
21
15
 
22
16
  it 'should not need counter cache if already define counter_cache' do
23
- Person.all.each do |person|
24
- person.pets.size
25
- end
17
+ Person.all.each { |person| person.pets.size }
26
18
  expect(Bullet.collected_counter_cache_notifications).to be_empty
27
19
  end
28
20
 
@@ -32,32 +24,24 @@ if !mongoid? && active_record?
32
24
  end
33
25
 
34
26
  it 'should not need counter cache without size' do
35
- Country.includes(:cities).each do |country|
36
- country.cities.empty?
37
- end
27
+ Country.includes(:cities).each { |country| country.cities.empty? }
38
28
  expect(Bullet.collected_counter_cache_notifications).to be_empty
39
29
  end
40
30
 
41
- if active_record5? || active_record6?
31
+ if ActiveRecord::VERSION::MAJOR > 4
42
32
  it 'should not need counter cache for has_many through' do
43
- Client.all.each do |client|
44
- client.firms.size
45
- end
33
+ Client.all.each { |client| client.firms.size }
46
34
  expect(Bullet.collected_counter_cache_notifications).to be_empty
47
35
  end
48
36
  else
49
37
  it 'should need counter cache for has_many through' do
50
- Client.all.each do |client|
51
- client.firms.size
52
- end
38
+ Client.all.each { |client| client.firms.size }
53
39
  expect(Bullet.collected_counter_cache_notifications).not_to be_empty
54
40
  end
55
41
  end
56
42
 
57
43
  it 'should not need counter cache with part of cities' do
58
- Country.all.each do |country|
59
- country.cities.where(name: 'first').size
60
- end
44
+ Country.all.each { |country| country.cities.where(name: 'first').size }
61
45
  expect(Bullet.collected_counter_cache_notifications).to be_empty
62
46
  end
63
47
 
@@ -66,21 +50,17 @@ if !mongoid? && active_record?
66
50
  after { Bullet.counter_cache_enable = true }
67
51
 
68
52
  it 'should not detect counter cache' do
69
- Country.all.each do |country|
70
- country.cities.size
71
- end
53
+ Country.all.each { |country| country.cities.size }
72
54
  expect(Bullet.collected_counter_cache_notifications).to be_empty
73
55
  end
74
56
  end
75
57
 
76
- context 'whitelist' do
77
- before { Bullet.add_whitelist type: :counter_cache, class_name: 'Country', association: :cities }
78
- after { Bullet.clear_whitelist }
58
+ context 'safelist' do
59
+ before { Bullet.add_safelist type: :counter_cache, class_name: 'Country', association: :cities }
60
+ after { Bullet.clear_safelist }
79
61
 
80
62
  it 'should not detect counter cache' do
81
- Country.all.each do |country|
82
- country.cities.size
83
- end
63
+ Country.all.each { |country| country.cities.size }
84
64
  expect(Bullet.collected_counter_cache_notifications).to be_empty
85
65
  end
86
66
  end