bullet 5.9.0 → 6.1.1
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 +27 -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 +1 -1
- data/Gemfile.rails-6.0 +15 -0
- data/Gemfile.rails-6.1 +15 -0
- data/README.md +31 -10
- data/lib/bullet.rb +50 -26
- data/lib/bullet/active_job.rb +13 -0
- data/lib/bullet/active_record4.rb +9 -32
- data/lib/bullet/active_record41.rb +7 -27
- data/lib/bullet/active_record42.rb +8 -24
- data/lib/bullet/active_record5.rb +188 -179
- data/lib/bullet/active_record52.rb +176 -168
- data/lib/bullet/active_record60.rb +267 -0
- data/lib/bullet/active_record61.rb +267 -0
- data/lib/bullet/bullet_xhr.js +63 -0
- data/lib/bullet/dependency.rb +50 -36
- data/lib/bullet/detector/association.rb +26 -20
- data/lib/bullet/detector/base.rb +1 -2
- data/lib/bullet/detector/counter_cache.rb +13 -9
- data/lib/bullet/detector/n_plus_one_query.rb +22 -12
- data/lib/bullet/detector/unused_eager_loading.rb +6 -3
- data/lib/bullet/ext/object.rb +4 -2
- data/lib/bullet/mongoid4x.rb +2 -6
- data/lib/bullet/mongoid5x.rb +2 -6
- data/lib/bullet/mongoid6x.rb +2 -6
- data/lib/bullet/mongoid7x.rb +2 -6
- data/lib/bullet/notification/base.rb +14 -18
- 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 +50 -25
- data/lib/bullet/stack_trace_filter.rb +6 -12
- data/lib/bullet/version.rb +1 -1
- data/lib/generators/bullet/install_generator.rb +23 -23
- 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 +7 -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 +86 -6
- data/spec/bullet/registry/association_spec.rb +2 -2
- data/spec/bullet/registry/base_spec.rb +1 -1
- data/spec/bullet_spec.rb +11 -30
- data/spec/integration/active_record/association_spec.rb +44 -136
- data/spec/integration/counter_cache_spec.rb +11 -31
- data/spec/integration/mongoid/association_spec.rb +18 -32
- data/spec/models/folder.rb +1 -2
- data/spec/models/group.rb +1 -2
- data/spec/models/page.rb +1 -2
- 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/test.sh +1 -0
- metadata +12 -7
@@ -16,11 +16,11 @@ module Bullet
|
|
16
16
|
|
17
17
|
context '#similarly_associated' do
|
18
18
|
it 'should return similarly associated keys' do
|
19
|
-
expect(subject.similarly_associated('key1', Set.new([
|
19
|
+
expect(subject.similarly_associated('key1', Set.new(%w[value]))).to eq(%w[key1 key2])
|
20
20
|
end
|
21
21
|
|
22
22
|
it 'should return empty if key does not exist' do
|
23
|
-
expect(subject.similarly_associated('key3', Set.new([
|
23
|
+
expect(subject.similarly_associated('key3', Set.new(%w[value]))).to be_empty
|
24
24
|
end
|
25
25
|
end
|
26
26
|
end
|
data/spec/bullet_spec.rb
CHANGED
@@ -17,9 +17,7 @@ describe Bullet, focused: true do
|
|
17
17
|
end
|
18
18
|
|
19
19
|
context 'disable Bullet' do
|
20
|
-
before
|
21
|
-
Bullet.enable = false
|
22
|
-
end
|
20
|
+
before { Bullet.enable = false }
|
23
21
|
|
24
22
|
it 'should be disabled' do
|
25
23
|
expect(subject).to_not be_enable
|
@@ -27,8 +25,8 @@ describe Bullet, focused: true do
|
|
27
25
|
|
28
26
|
context 'enable Bullet again without patching again the orms' do
|
29
27
|
before do
|
30
|
-
expect(Bullet::Mongoid).not_to receive(:enable) if defined?
|
31
|
-
expect(Bullet::ActiveRecord).not_to receive(:enable) if defined?
|
28
|
+
expect(Bullet::Mongoid).not_to receive(:enable) if defined?(Bullet::Mongoid)
|
29
|
+
expect(Bullet::ActiveRecord).not_to receive(:enable) if defined?(Bullet::ActiveRecord)
|
32
30
|
Bullet.enable = true
|
33
31
|
end
|
34
32
|
|
@@ -42,9 +40,7 @@ describe Bullet, focused: true do
|
|
42
40
|
|
43
41
|
describe '#start?' do
|
44
42
|
context 'when bullet is disabled' do
|
45
|
-
before(:each)
|
46
|
-
Bullet.enable = false
|
47
|
-
end
|
43
|
+
before(:each) { Bullet.enable = false }
|
48
44
|
|
49
45
|
it 'should not be started' do
|
50
46
|
expect(Bullet).not_to be_start
|
@@ -53,28 +49,19 @@ describe Bullet, focused: true do
|
|
53
49
|
end
|
54
50
|
|
55
51
|
describe '#debug' do
|
56
|
-
before(:each)
|
57
|
-
$stdout = StringIO.new
|
58
|
-
end
|
52
|
+
before(:each) { $stdout = StringIO.new }
|
59
53
|
|
60
|
-
after(:each)
|
61
|
-
$stdout = STDOUT
|
62
|
-
end
|
54
|
+
after(:each) { $stdout = STDOUT }
|
63
55
|
|
64
56
|
context 'when debug is enabled' do
|
65
|
-
before(:each)
|
66
|
-
ENV['BULLET_DEBUG'] = 'true'
|
67
|
-
end
|
57
|
+
before(:each) { ENV['BULLET_DEBUG'] = 'true' }
|
68
58
|
|
69
|
-
after(:each)
|
70
|
-
ENV['BULLET_DEBUG'] = 'false'
|
71
|
-
end
|
59
|
+
after(:each) { ENV['BULLET_DEBUG'] = 'false' }
|
72
60
|
|
73
61
|
it 'should output debug information' do
|
74
62
|
Bullet.debug('debug_message', 'this is helpful information')
|
75
63
|
|
76
|
-
expect($stdout.string)
|
77
|
-
.to eq("[Bullet][debug_message] this is helpful information\n")
|
64
|
+
expect($stdout.string).to eq("[Bullet][debug_message] this is helpful information\n")
|
78
65
|
end
|
79
66
|
end
|
80
67
|
|
@@ -101,7 +88,7 @@ describe Bullet, focused: true do
|
|
101
88
|
it 'is deleted from the whitelist successfully' do
|
102
89
|
Bullet.add_whitelist(type: :n_plus_one_query, class_name: 'Klass', association: :department)
|
103
90
|
Bullet.delete_whitelist(type: :n_plus_one_query, class_name: 'Klass', association: :department)
|
104
|
-
expect(
|
91
|
+
expect(Thread.current[:whitelist][:n_plus_one_query]).to eq({})
|
105
92
|
end
|
106
93
|
end
|
107
94
|
|
@@ -125,13 +112,7 @@ describe Bullet, focused: true do
|
|
125
112
|
end
|
126
113
|
|
127
114
|
context 'when called with Rack environment hash' do
|
128
|
-
let(:env) {
|
129
|
-
{
|
130
|
-
'REQUEST_METHOD' => 'GET',
|
131
|
-
'PATH_INFO' => '/path',
|
132
|
-
'QUERY_STRING' => 'foo=bar'
|
133
|
-
}
|
134
|
-
}
|
115
|
+
let(:env) { { 'REQUEST_METHOD' => 'GET', 'PATH_INFO' => '/path', 'QUERY_STRING' => 'foo=bar' } }
|
135
116
|
|
136
117
|
context "when env['REQUEST_URI'] is nil" do
|
137
118
|
before { env['REQUEST_URI'] = nil }
|
@@ -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
|
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
|
|
@@ -362,29 +322,16 @@ if active_record?
|
|
362
322
|
|
363
323
|
new_post.trigger_after_save = true
|
364
324
|
new_post.save!
|
325
|
+
Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
|
365
326
|
expect(Bullet::Detector::Association).not_to be_has_unused_preload_associations
|
366
327
|
|
367
328
|
expect(Bullet::Detector::Association).to be_completely_preloading_associations
|
368
329
|
end
|
369
|
-
|
370
|
-
it 'should not detect "manual" preload' do
|
371
|
-
comment = Comment.all.to_a.first
|
372
|
-
post = Post.find(comment.post_id)
|
373
|
-
# "manually" preload with out-of-band data
|
374
|
-
comment.post = post
|
375
|
-
# loading it should not trigger anything
|
376
|
-
comment.post
|
377
|
-
|
378
|
-
expect(Bullet::Detector::Association).not_to be_has_unused_preload_associations
|
379
|
-
expect(Bullet::Detector::Association).to be_completely_preloading_associations
|
380
|
-
end
|
381
330
|
end
|
382
331
|
|
383
332
|
context 'comment => post => category' do
|
384
333
|
it 'should detect non preload association with comment => post' do
|
385
|
-
Comment.all.each
|
386
|
-
comment.post.category.name
|
387
|
-
end
|
334
|
+
Comment.all.each { |comment| comment.post.category.name }
|
388
335
|
Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
|
389
336
|
expect(Bullet::Detector::Association).not_to be_has_unused_preload_associations
|
390
337
|
|
@@ -401,9 +348,7 @@ if active_record?
|
|
401
348
|
end
|
402
349
|
|
403
350
|
it 'should detect non preload association with post => category' do
|
404
|
-
Comment.includes(:post).each
|
405
|
-
comment.post.category.name
|
406
|
-
end
|
351
|
+
Comment.includes(:post).each { |comment| comment.post.category.name }
|
407
352
|
Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
|
408
353
|
expect(Bullet::Detector::Association).not_to be_has_unused_preload_associations
|
409
354
|
|
@@ -411,9 +356,7 @@ if active_record?
|
|
411
356
|
end
|
412
357
|
|
413
358
|
it 'should not detect unpreload association' do
|
414
|
-
Comment.includes(post: :category).each
|
415
|
-
comment.post.category.name
|
416
|
-
end
|
359
|
+
Comment.includes(post: :category).each { |comment| comment.post.category.name }
|
417
360
|
Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
|
418
361
|
expect(Bullet::Detector::Association).not_to be_has_unused_preload_associations
|
419
362
|
|
@@ -423,9 +366,8 @@ if active_record?
|
|
423
366
|
|
424
367
|
context 'comment => author, post => writer' do
|
425
368
|
it 'should detect non preloaded writer' do
|
426
|
-
Comment.includes(%i[author post]).where(['base_users.id = ?', BaseUser.first]).references(:base_users)
|
427
|
-
comment.post.writer.name
|
428
|
-
end
|
369
|
+
Comment.includes(%i[author post]).where(['base_users.id = ?', BaseUser.first]).references(:base_users)
|
370
|
+
.each { |comment| comment.post.writer.name }
|
429
371
|
Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
|
430
372
|
expect(Bullet::Detector::Association).not_to be_has_unused_preload_associations
|
431
373
|
|
@@ -433,9 +375,9 @@ if active_record?
|
|
433
375
|
end
|
434
376
|
|
435
377
|
it 'should detect unused preload with comment => author' do
|
436
|
-
Comment.includes([:author, { post: :writer }]).where(['base_users.id = ?', BaseUser.first]).references(
|
437
|
-
|
438
|
-
|
378
|
+
Comment.includes([:author, { post: :writer }]).where(['base_users.id = ?', BaseUser.first]).references(
|
379
|
+
:base_users
|
380
|
+
).each { |comment| comment.post.writer.name }
|
439
381
|
Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
|
440
382
|
expect(Bullet::Detector::Association).not_to be_has_unused_preload_associations
|
441
383
|
|
@@ -453,11 +395,7 @@ if active_record?
|
|
453
395
|
end
|
454
396
|
|
455
397
|
it 'should not raise a stack error from posts to category' do
|
456
|
-
expect {
|
457
|
-
Comment.includes(post: :category).each do |com|
|
458
|
-
com.post.category
|
459
|
-
end
|
460
|
-
}.not_to raise_error
|
398
|
+
expect { Comment.includes(post: :category).each { |com| com.post.category } }.not_to raise_error
|
461
399
|
end
|
462
400
|
end
|
463
401
|
end
|
@@ -465,9 +403,7 @@ if active_record?
|
|
465
403
|
describe Bullet::Detector::Association, 'has_and_belongs_to_many' do
|
466
404
|
context 'students <=> teachers' do
|
467
405
|
it 'should detect non preload associations' do
|
468
|
-
Student.all.each
|
469
|
-
student.teachers.map(&:name)
|
470
|
-
end
|
406
|
+
Student.all.each { |student| student.teachers.map(&:name) }
|
471
407
|
Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
|
472
408
|
expect(Bullet::Detector::Association).not_to be_has_unused_preload_associations
|
473
409
|
|
@@ -475,9 +411,7 @@ if active_record?
|
|
475
411
|
end
|
476
412
|
|
477
413
|
it 'should detect preload associations' do
|
478
|
-
Student.includes(:teachers).each
|
479
|
-
student.teachers.map(&:name)
|
480
|
-
end
|
414
|
+
Student.includes(:teachers).each { |student| student.teachers.map(&:name) }
|
481
415
|
Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
|
482
416
|
expect(Bullet::Detector::Association).not_to be_has_unused_preload_associations
|
483
417
|
|
@@ -501,9 +435,7 @@ if active_record?
|
|
501
435
|
end
|
502
436
|
|
503
437
|
it 'should detect non preload student => teachers with empty?' do
|
504
|
-
Student.all.each
|
505
|
-
student.teachers.empty?
|
506
|
-
end
|
438
|
+
Student.all.each { |student| student.teachers.empty? }
|
507
439
|
Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
|
508
440
|
expect(Bullet::Detector::Association).not_to be_has_unused_preload_associations
|
509
441
|
|
@@ -515,9 +447,7 @@ if active_record?
|
|
515
447
|
describe Bullet::Detector::Association, 'has_many :through' do
|
516
448
|
context 'firm => clients' do
|
517
449
|
it 'should detect non preload associations' do
|
518
|
-
Firm.all.each
|
519
|
-
firm.clients.map(&:name)
|
520
|
-
end
|
450
|
+
Firm.all.each { |firm| firm.clients.map(&:name) }
|
521
451
|
Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
|
522
452
|
expect(Bullet::Detector::Association).not_to be_has_unused_preload_associations
|
523
453
|
|
@@ -525,9 +455,7 @@ if active_record?
|
|
525
455
|
end
|
526
456
|
|
527
457
|
it 'should detect preload associations' do
|
528
|
-
Firm.includes(:clients).each
|
529
|
-
firm.clients.map(&:name)
|
530
|
-
end
|
458
|
+
Firm.includes(:clients).each { |firm| firm.clients.map(&:name) }
|
531
459
|
Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
|
532
460
|
expect(Bullet::Detector::Association).not_to be_has_unused_preload_associations
|
533
461
|
|
@@ -553,9 +481,7 @@ if active_record?
|
|
553
481
|
|
554
482
|
context 'firm => clients => groups' do
|
555
483
|
it 'should detect non preload associations' do
|
556
|
-
Firm.all.each
|
557
|
-
firm.groups.map(&:name)
|
558
|
-
end
|
484
|
+
Firm.all.each { |firm| firm.groups.map(&:name) }
|
559
485
|
Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
|
560
486
|
expect(Bullet::Detector::Association).not_to be_has_unused_preload_associations
|
561
487
|
|
@@ -563,9 +489,7 @@ if active_record?
|
|
563
489
|
end
|
564
490
|
|
565
491
|
it 'should detect preload associations' do
|
566
|
-
Firm.includes(:groups).each
|
567
|
-
firm.groups.map(&:name)
|
568
|
-
end
|
492
|
+
Firm.includes(:groups).each { |firm| firm.groups.map(&:name) }
|
569
493
|
Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
|
570
494
|
expect(Bullet::Detector::Association).not_to be_has_unused_preload_associations
|
571
495
|
|
@@ -593,9 +517,7 @@ if active_record?
|
|
593
517
|
describe Bullet::Detector::Association, 'has_one' do
|
594
518
|
context 'company => address' do
|
595
519
|
it 'should detect non preload association' do
|
596
|
-
Company.all.each
|
597
|
-
company.address.name
|
598
|
-
end
|
520
|
+
Company.all.each { |company| company.address.name }
|
599
521
|
Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
|
600
522
|
expect(Bullet::Detector::Association).not_to be_has_unused_preload_associations
|
601
523
|
|
@@ -603,9 +525,7 @@ if active_record?
|
|
603
525
|
end
|
604
526
|
|
605
527
|
it 'should detect preload association' do
|
606
|
-
Company.includes(:address).each
|
607
|
-
company.address.name
|
608
|
-
end
|
528
|
+
Company.includes(:address).each { |company| company.address.name }
|
609
529
|
Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
|
610
530
|
expect(Bullet::Detector::Association).not_to be_has_unused_preload_associations
|
611
531
|
|
@@ -699,9 +619,7 @@ if active_record?
|
|
699
619
|
describe Bullet::Detector::Association, 'STI' do
|
700
620
|
context 'page => author' do
|
701
621
|
it 'should detect non preload associations' do
|
702
|
-
Page.all.each
|
703
|
-
page.author.name
|
704
|
-
end
|
622
|
+
Page.all.each { |page| page.author.name }
|
705
623
|
Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
|
706
624
|
expect(Bullet::Detector::Association).not_to be_has_unused_preload_associations
|
707
625
|
|
@@ -709,9 +627,7 @@ if active_record?
|
|
709
627
|
end
|
710
628
|
|
711
629
|
it 'should detect preload associations' do
|
712
|
-
Page.includes(:author).each
|
713
|
-
page.author.name
|
714
|
-
end
|
630
|
+
Page.includes(:author).each { |page| page.author.name }
|
715
631
|
Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
|
716
632
|
expect(Bullet::Detector::Association).not_to be_has_unused_preload_associations
|
717
633
|
|
@@ -740,9 +656,7 @@ if active_record?
|
|
740
656
|
after { Bullet.n_plus_one_query_enable = true }
|
741
657
|
|
742
658
|
it 'should not detect n plus one query' do
|
743
|
-
Post.all.each
|
744
|
-
post.comments.map(&:name)
|
745
|
-
end
|
659
|
+
Post.all.each { |post| post.comments.map(&:name) }
|
746
660
|
Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
|
747
661
|
|
748
662
|
expect(Bullet::Detector::Association).not_to be_detecting_unpreloaded_association_for(Post, :comments)
|
@@ -771,9 +685,7 @@ if active_record?
|
|
771
685
|
end
|
772
686
|
|
773
687
|
it 'should still detect n plus one query' do
|
774
|
-
Post.all.each
|
775
|
-
post.comments.map(&:name)
|
776
|
-
end
|
688
|
+
Post.all.each { |post| post.comments.map(&:name) }
|
777
689
|
Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
|
778
690
|
|
779
691
|
expect(Bullet::Detector::Association).to be_detecting_unpreloaded_association_for(Post, :comments)
|
@@ -786,9 +698,7 @@ if active_record?
|
|
786
698
|
after { Bullet.clear_whitelist }
|
787
699
|
|
788
700
|
it 'should not detect n plus one query' do
|
789
|
-
Post.all.each
|
790
|
-
post.comments.map(&:name)
|
791
|
-
end
|
701
|
+
Post.all.each { |post| post.comments.map(&:name) }
|
792
702
|
Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
|
793
703
|
|
794
704
|
expect(Bullet::Detector::Association).not_to be_detecting_unpreloaded_association_for(Post, :comments)
|
@@ -817,9 +727,7 @@ if active_record?
|
|
817
727
|
end
|
818
728
|
|
819
729
|
it 'should still detect n plus one query' do
|
820
|
-
Post.all.each
|
821
|
-
post.comments.map(&:name)
|
822
|
-
end
|
730
|
+
Post.all.each { |post| post.comments.map(&:name) }
|
823
731
|
Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
|
824
732
|
|
825
733
|
expect(Bullet::Detector::Association).to be_detecting_unpreloaded_association_for(Post, :comments)
|