bullet 5.7.5 → 6.1.4
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 +5 -5
- data/.travis.yml +22 -1
- data/CHANGELOG.md +49 -12
- data/Gemfile.mongoid-7.0 +15 -0
- data/Gemfile.rails-4.0 +1 -1
- data/Gemfile.rails-4.1 +1 -1
- data/Gemfile.rails-4.2 +1 -1
- data/Gemfile.rails-5.0 +1 -1
- data/Gemfile.rails-5.1 +1 -1
- data/Gemfile.rails-5.2 +2 -2
- data/Gemfile.rails-6.0 +15 -0
- data/Gemfile.rails-6.1 +15 -0
- data/README.md +38 -13
- data/Rakefile +1 -1
- data/bullet.gemspec +8 -3
- data/lib/bullet.rb +50 -22
- data/lib/bullet/active_job.rb +13 -0
- data/lib/bullet/active_record4.rb +12 -35
- data/lib/bullet/active_record41.rb +10 -30
- data/lib/bullet/active_record42.rb +12 -27
- data/lib/bullet/active_record5.rb +197 -177
- data/lib/bullet/active_record52.rb +191 -166
- data/lib/bullet/active_record60.rb +278 -0
- data/lib/bullet/active_record61.rb +278 -0
- data/lib/bullet/bullet_xhr.js +63 -0
- data/lib/bullet/dependency.rb +54 -34
- data/lib/bullet/detector/association.rb +26 -20
- data/lib/bullet/detector/base.rb +1 -2
- data/lib/bullet/detector/counter_cache.rb +14 -9
- data/lib/bullet/detector/n_plus_one_query.rb +27 -17
- data/lib/bullet/detector/unused_eager_loading.rb +7 -3
- data/lib/bullet/ext/object.rb +5 -3
- data/lib/bullet/ext/string.rb +1 -1
- data/lib/bullet/mongoid4x.rb +4 -7
- data/lib/bullet/mongoid5x.rb +4 -7
- data/lib/bullet/mongoid6x.rb +8 -11
- data/lib/bullet/mongoid7x.rb +57 -0
- data/lib/bullet/notification/base.rb +15 -19
- data/lib/bullet/notification/n_plus_one_query.rb +2 -4
- data/lib/bullet/notification/unused_eager_loading.rb +2 -4
- data/lib/bullet/rack.rb +54 -28
- data/lib/bullet/stack_trace_filter.rb +39 -30
- data/lib/bullet/version.rb +1 -1
- data/lib/generators/bullet/install_generator.rb +26 -26
- data/perf/benchmark.rb +8 -14
- data/spec/bullet/detector/counter_cache_spec.rb +6 -6
- data/spec/bullet/detector/n_plus_one_query_spec.rb +30 -3
- data/spec/bullet/detector/unused_eager_loading_spec.rb +19 -6
- data/spec/bullet/ext/object_spec.rb +9 -4
- data/spec/bullet/notification/base_spec.rb +1 -3
- data/spec/bullet/notification/n_plus_one_query_spec.rb +16 -3
- data/spec/bullet/notification/unused_eager_loading_spec.rb +5 -1
- data/spec/bullet/rack_spec.rb +140 -5
- data/spec/bullet/registry/association_spec.rb +2 -2
- data/spec/bullet/registry/base_spec.rb +1 -1
- data/spec/bullet_spec.rb +10 -29
- data/spec/integration/active_record/association_spec.rb +122 -118
- data/spec/integration/counter_cache_spec.rb +11 -31
- data/spec/integration/mongoid/association_spec.rb +18 -32
- data/spec/models/attachment.rb +5 -0
- data/spec/models/client.rb +2 -0
- data/spec/models/firm.rb +1 -0
- data/spec/models/folder.rb +1 -2
- data/spec/models/group.rb +3 -0
- data/spec/models/page.rb +1 -2
- data/spec/models/post.rb +15 -0
- data/spec/models/submission.rb +1 -0
- data/spec/models/user.rb +1 -0
- data/spec/models/writer.rb +1 -2
- data/spec/spec_helper.rb +6 -10
- data/spec/support/bullet_ext.rb +8 -9
- data/spec/support/mongo_seed.rb +2 -16
- data/spec/support/sqlite_seed.rb +17 -2
- data/test.sh +2 -0
- data/update.sh +1 -0
- metadata +24 -11
@@ -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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
@@ -156,9 +130,7 @@ if active_record?
|
|
156
130
|
end
|
157
131
|
|
158
132
|
it 'should detect unused preload with post => commnets, no category => posts' do
|
159
|
-
Category.includes(posts: :comments).each
|
160
|
-
category.posts.map(&:name)
|
161
|
-
end
|
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
|
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,9 +195,7 @@ 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
|
229
|
-
post.comments.first.name if post.comments.first
|
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
|
|
@@ -246,7 +214,7 @@ if active_record?
|
|
246
214
|
category = Category.first
|
247
215
|
category.draft_post.destroy!
|
248
216
|
post = category.draft_post
|
249
|
-
post.
|
217
|
+
post.update!(link: true)
|
250
218
|
Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
|
251
219
|
expect(Bullet::Detector::Association).not_to be_has_unused_preload_associations
|
252
220
|
|
@@ -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
|
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
|
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
|
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
|
|
@@ -331,10 +293,8 @@ if active_record?
|
|
331
293
|
expect(Bullet::Detector::Association).to be_completely_preloading_associations
|
332
294
|
end
|
333
295
|
|
334
|
-
it 'should
|
335
|
-
Comment.includes(:post).each
|
336
|
-
comment.post.name
|
337
|
-
end
|
296
|
+
it 'should detect preload with comment => post' do
|
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
|
|
@@ -356,13 +316,22 @@ if active_record?
|
|
356
316
|
|
357
317
|
expect(Bullet::Detector::Association).to be_completely_preloading_associations
|
358
318
|
end
|
319
|
+
|
320
|
+
it 'should not detect newly assigned object in an after_save' do
|
321
|
+
new_post = Post.new(category: Category.first)
|
322
|
+
|
323
|
+
new_post.trigger_after_save = true
|
324
|
+
new_post.save!
|
325
|
+
Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
|
326
|
+
expect(Bullet::Detector::Association).not_to be_has_unused_preload_associations
|
327
|
+
|
328
|
+
expect(Bullet::Detector::Association).to be_completely_preloading_associations
|
329
|
+
end
|
359
330
|
end
|
360
331
|
|
361
332
|
context 'comment => post => category' do
|
362
333
|
it 'should detect non preload association with comment => post' do
|
363
|
-
Comment.all.each
|
364
|
-
comment.post.category.name
|
365
|
-
end
|
334
|
+
Comment.all.each { |comment| comment.post.category.name }
|
366
335
|
Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
|
367
336
|
expect(Bullet::Detector::Association).not_to be_has_unused_preload_associations
|
368
337
|
|
@@ -379,9 +348,7 @@ if active_record?
|
|
379
348
|
end
|
380
349
|
|
381
350
|
it 'should detect non preload association with post => category' do
|
382
|
-
Comment.includes(:post).each
|
383
|
-
comment.post.category.name
|
384
|
-
end
|
351
|
+
Comment.includes(:post).each { |comment| comment.post.category.name }
|
385
352
|
Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
|
386
353
|
expect(Bullet::Detector::Association).not_to be_has_unused_preload_associations
|
387
354
|
|
@@ -389,9 +356,7 @@ if active_record?
|
|
389
356
|
end
|
390
357
|
|
391
358
|
it 'should not detect unpreload association' do
|
392
|
-
Comment.includes(post: :category).each
|
393
|
-
comment.post.category.name
|
394
|
-
end
|
359
|
+
Comment.includes(post: :category).each { |comment| comment.post.category.name }
|
395
360
|
Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
|
396
361
|
expect(Bullet::Detector::Association).not_to be_has_unused_preload_associations
|
397
362
|
|
@@ -401,9 +366,8 @@ if active_record?
|
|
401
366
|
|
402
367
|
context 'comment => author, post => writer' do
|
403
368
|
it 'should detect non preloaded writer' do
|
404
|
-
Comment.includes(%i[author post]).where(['base_users.id = ?', BaseUser.first]).references(:base_users)
|
405
|
-
comment.post.writer.name
|
406
|
-
end
|
369
|
+
Comment.includes(%i[author post]).where(['base_users.id = ?', BaseUser.first]).references(:base_users)
|
370
|
+
.each { |comment| comment.post.writer.name }
|
407
371
|
Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
|
408
372
|
expect(Bullet::Detector::Association).not_to be_has_unused_preload_associations
|
409
373
|
|
@@ -411,9 +375,9 @@ if active_record?
|
|
411
375
|
end
|
412
376
|
|
413
377
|
it 'should detect unused preload with comment => author' do
|
414
|
-
Comment.includes([:author, { post: :writer }]).where(['base_users.id = ?', BaseUser.first]).references(
|
415
|
-
|
416
|
-
|
378
|
+
Comment.includes([:author, { post: :writer }]).where(['base_users.id = ?', BaseUser.first]).references(
|
379
|
+
:base_users
|
380
|
+
).each { |comment| comment.post.writer.name }
|
417
381
|
Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
|
418
382
|
expect(Bullet::Detector::Association).not_to be_has_unused_preload_associations
|
419
383
|
|
@@ -431,11 +395,7 @@ if active_record?
|
|
431
395
|
end
|
432
396
|
|
433
397
|
it 'should not raise a stack error from posts to category' do
|
434
|
-
expect {
|
435
|
-
Comment.includes(post: :category).each do |com|
|
436
|
-
com.post.category
|
437
|
-
end
|
438
|
-
}.not_to raise_error
|
398
|
+
expect { Comment.includes(post: :category).each { |com| com.post.category } }.not_to raise_error
|
439
399
|
end
|
440
400
|
end
|
441
401
|
end
|
@@ -443,9 +403,7 @@ if active_record?
|
|
443
403
|
describe Bullet::Detector::Association, 'has_and_belongs_to_many' do
|
444
404
|
context 'students <=> teachers' do
|
445
405
|
it 'should detect non preload associations' do
|
446
|
-
Student.all.each
|
447
|
-
student.teachers.map(&:name)
|
448
|
-
end
|
406
|
+
Student.all.each { |student| student.teachers.map(&:name) }
|
449
407
|
Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
|
450
408
|
expect(Bullet::Detector::Association).not_to be_has_unused_preload_associations
|
451
409
|
|
@@ -453,9 +411,7 @@ if active_record?
|
|
453
411
|
end
|
454
412
|
|
455
413
|
it 'should detect preload associations' do
|
456
|
-
Student.includes(:teachers).each
|
457
|
-
student.teachers.map(&:name)
|
458
|
-
end
|
414
|
+
Student.includes(:teachers).each { |student| student.teachers.map(&:name) }
|
459
415
|
Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
|
460
416
|
expect(Bullet::Detector::Association).not_to be_has_unused_preload_associations
|
461
417
|
|
@@ -479,9 +435,7 @@ if active_record?
|
|
479
435
|
end
|
480
436
|
|
481
437
|
it 'should detect non preload student => teachers with empty?' do
|
482
|
-
Student.all.each
|
483
|
-
student.teachers.empty?
|
484
|
-
end
|
438
|
+
Student.all.each { |student| student.teachers.empty? }
|
485
439
|
Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
|
486
440
|
expect(Bullet::Detector::Association).not_to be_has_unused_preload_associations
|
487
441
|
|
@@ -493,9 +447,7 @@ if active_record?
|
|
493
447
|
describe Bullet::Detector::Association, 'has_many :through' do
|
494
448
|
context 'firm => clients' do
|
495
449
|
it 'should detect non preload associations' do
|
496
|
-
Firm.all.each
|
497
|
-
firm.clients.map(&:name)
|
498
|
-
end
|
450
|
+
Firm.all.each { |firm| firm.clients.map(&:name) }
|
499
451
|
Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
|
500
452
|
expect(Bullet::Detector::Association).not_to be_has_unused_preload_associations
|
501
453
|
|
@@ -503,9 +455,7 @@ if active_record?
|
|
503
455
|
end
|
504
456
|
|
505
457
|
it 'should detect preload associations' do
|
506
|
-
Firm.includes(:clients).each
|
507
|
-
firm.clients.map(&:name)
|
508
|
-
end
|
458
|
+
Firm.includes(:clients).each { |firm| firm.clients.map(&:name) }
|
509
459
|
Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
|
510
460
|
expect(Bullet::Detector::Association).not_to be_has_unused_preload_associations
|
511
461
|
|
@@ -528,14 +478,46 @@ if active_record?
|
|
528
478
|
expect(Bullet::Detector::Association).to be_completely_preloading_associations
|
529
479
|
end
|
530
480
|
end
|
481
|
+
|
482
|
+
context 'firm => clients => groups' do
|
483
|
+
it 'should detect non preload associations' do
|
484
|
+
Firm.all.each { |firm| firm.groups.map(&:name) }
|
485
|
+
Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
|
486
|
+
expect(Bullet::Detector::Association).not_to be_has_unused_preload_associations
|
487
|
+
|
488
|
+
expect(Bullet::Detector::Association).to be_detecting_unpreloaded_association_for(Firm, :groups)
|
489
|
+
end
|
490
|
+
|
491
|
+
it 'should detect preload associations' do
|
492
|
+
Firm.includes(:groups).each { |firm| firm.groups.map(&:name) }
|
493
|
+
Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
|
494
|
+
expect(Bullet::Detector::Association).not_to be_has_unused_preload_associations
|
495
|
+
|
496
|
+
expect(Bullet::Detector::Association).to be_completely_preloading_associations
|
497
|
+
end
|
498
|
+
|
499
|
+
it 'should not detect preload associations' do
|
500
|
+
Firm.all.map(&:name)
|
501
|
+
Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
|
502
|
+
expect(Bullet::Detector::Association).not_to be_has_unused_preload_associations
|
503
|
+
|
504
|
+
expect(Bullet::Detector::Association).to be_completely_preloading_associations
|
505
|
+
end
|
506
|
+
|
507
|
+
it 'should detect unused preload associations' do
|
508
|
+
Firm.includes(:groups).map(&:name)
|
509
|
+
Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
|
510
|
+
expect(Bullet::Detector::Association).to be_unused_preload_associations_for(Firm, :groups)
|
511
|
+
|
512
|
+
expect(Bullet::Detector::Association).to be_completely_preloading_associations
|
513
|
+
end
|
514
|
+
end
|
531
515
|
end
|
532
516
|
|
533
517
|
describe Bullet::Detector::Association, 'has_one' do
|
534
518
|
context 'company => address' do
|
535
519
|
it 'should detect non preload association' do
|
536
|
-
Company.all.each
|
537
|
-
company.address.name
|
538
|
-
end
|
520
|
+
Company.all.each { |company| company.address.name }
|
539
521
|
Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
|
540
522
|
expect(Bullet::Detector::Association).not_to be_has_unused_preload_associations
|
541
523
|
|
@@ -543,9 +525,7 @@ if active_record?
|
|
543
525
|
end
|
544
526
|
|
545
527
|
it 'should detect preload association' do
|
546
|
-
Company.includes(:address).each
|
547
|
-
company.address.name
|
548
|
-
end
|
528
|
+
Company.includes(:address).each { |company| company.address.name }
|
549
529
|
Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
|
550
530
|
expect(Bullet::Detector::Association).not_to be_has_unused_preload_associations
|
551
531
|
|
@@ -581,6 +561,42 @@ if active_record?
|
|
581
561
|
end
|
582
562
|
end
|
583
563
|
|
564
|
+
describe Bullet::Detector::Association, 'has_one :through' do
|
565
|
+
context 'user => attachment' do
|
566
|
+
it 'should detect non preload associations' do
|
567
|
+
User.all.each { |user| user.submission_attachment.file_name }
|
568
|
+
Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
|
569
|
+
expect(Bullet::Detector::Association).not_to be_has_unused_preload_associations
|
570
|
+
|
571
|
+
expect(Bullet::Detector::Association).to be_detecting_unpreloaded_association_for(User, :submission_attachment)
|
572
|
+
end
|
573
|
+
|
574
|
+
it 'should detect preload associations' do
|
575
|
+
User.includes(:submission_attachment).each { |user| user.submission_attachment.file_name }
|
576
|
+
Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
|
577
|
+
expect(Bullet::Detector::Association).not_to be_has_unused_preload_associations
|
578
|
+
|
579
|
+
expect(Bullet::Detector::Association).to be_completely_preloading_associations
|
580
|
+
end
|
581
|
+
|
582
|
+
it 'should not detect preload associations' do
|
583
|
+
User.all.map(&:name)
|
584
|
+
Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
|
585
|
+
expect(Bullet::Detector::Association).not_to be_has_unused_preload_associations
|
586
|
+
|
587
|
+
expect(Bullet::Detector::Association).to be_completely_preloading_associations
|
588
|
+
end
|
589
|
+
|
590
|
+
it 'should detect unused preload associations' do
|
591
|
+
User.includes(:submission_attachment).map(&:name)
|
592
|
+
Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
|
593
|
+
expect(Bullet::Detector::Association).to be_unused_preload_associations_for(User, :submission_attachment)
|
594
|
+
|
595
|
+
expect(Bullet::Detector::Association).to be_completely_preloading_associations
|
596
|
+
end
|
597
|
+
end
|
598
|
+
end
|
599
|
+
|
584
600
|
describe Bullet::Detector::Association, 'call one association that in possible objects' do
|
585
601
|
it 'should not detect preload association' do
|
586
602
|
Post.all
|
@@ -639,9 +655,7 @@ if active_record?
|
|
639
655
|
describe Bullet::Detector::Association, 'STI' do
|
640
656
|
context 'page => author' do
|
641
657
|
it 'should detect non preload associations' do
|
642
|
-
Page.all.each
|
643
|
-
page.author.name
|
644
|
-
end
|
658
|
+
Page.all.each { |page| page.author.name }
|
645
659
|
Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
|
646
660
|
expect(Bullet::Detector::Association).not_to be_has_unused_preload_associations
|
647
661
|
|
@@ -649,9 +663,7 @@ if active_record?
|
|
649
663
|
end
|
650
664
|
|
651
665
|
it 'should detect preload associations' do
|
652
|
-
Page.includes(:author).each
|
653
|
-
page.author.name
|
654
|
-
end
|
666
|
+
Page.includes(:author).each { |page| page.author.name }
|
655
667
|
Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
|
656
668
|
expect(Bullet::Detector::Association).not_to be_has_unused_preload_associations
|
657
669
|
|
@@ -680,9 +692,7 @@ if active_record?
|
|
680
692
|
after { Bullet.n_plus_one_query_enable = true }
|
681
693
|
|
682
694
|
it 'should not detect n plus one query' do
|
683
|
-
Post.all.each
|
684
|
-
post.comments.map(&:name)
|
685
|
-
end
|
695
|
+
Post.all.each { |post| post.comments.map(&:name) }
|
686
696
|
Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
|
687
697
|
|
688
698
|
expect(Bullet::Detector::Association).not_to be_detecting_unpreloaded_association_for(Post, :comments)
|
@@ -711,9 +721,7 @@ if active_record?
|
|
711
721
|
end
|
712
722
|
|
713
723
|
it 'should still detect n plus one query' do
|
714
|
-
Post.all.each
|
715
|
-
post.comments.map(&:name)
|
716
|
-
end
|
724
|
+
Post.all.each { |post| post.comments.map(&:name) }
|
717
725
|
Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
|
718
726
|
|
719
727
|
expect(Bullet::Detector::Association).to be_detecting_unpreloaded_association_for(Post, :comments)
|
@@ -726,9 +734,7 @@ if active_record?
|
|
726
734
|
after { Bullet.clear_whitelist }
|
727
735
|
|
728
736
|
it 'should not detect n plus one query' do
|
729
|
-
Post.all.each
|
730
|
-
post.comments.map(&:name)
|
731
|
-
end
|
737
|
+
Post.all.each { |post| post.comments.map(&:name) }
|
732
738
|
Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
|
733
739
|
|
734
740
|
expect(Bullet::Detector::Association).not_to be_detecting_unpreloaded_association_for(Post, :comments)
|
@@ -757,9 +763,7 @@ if active_record?
|
|
757
763
|
end
|
758
764
|
|
759
765
|
it 'should still detect n plus one query' do
|
760
|
-
Post.all.each
|
761
|
-
post.comments.map(&:name)
|
762
|
-
end
|
766
|
+
Post.all.each { |post| post.comments.map(&:name) }
|
763
767
|
Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
|
764
768
|
|
765
769
|
expect(Bullet::Detector::Association).to be_detecting_unpreloaded_association_for(Post, :comments)
|