bullet 5.6.0 → 5.6.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 +4 -4
- data/CHANGELOG.md +4 -0
- data/Guardfile +2 -2
- data/Rakefile +16 -16
- data/bullet.gemspec +11 -11
- data/lib/bullet.rb +3 -3
- data/lib/bullet/detector/association.rb +2 -2
- data/lib/bullet/detector/counter_cache.rb +3 -3
- data/lib/bullet/detector/n_plus_one_query.rb +5 -5
- data/lib/bullet/detector/unused_eager_loading.rb +2 -2
- data/lib/bullet/ext/string.rb +1 -1
- data/lib/bullet/notification/base.rb +6 -6
- data/lib/bullet/notification/counter_cache.rb +1 -1
- data/lib/bullet/rack.rb +4 -4
- data/lib/bullet/stack_trace_filter.rb +2 -2
- data/lib/bullet/version.rb +2 -2
- data/lib/generators/bullet/install_generator.rb +5 -5
- data/perf/benchmark.rb +3 -3
- data/spec/bullet/detector/association_spec.rb +4 -4
- data/spec/bullet/detector/counter_cache_spec.rb +11 -11
- data/spec/bullet/detector/n_plus_one_query_spec.rb +33 -33
- data/spec/bullet/detector/unused_eager_loading_spec.rb +19 -19
- data/spec/bullet/ext/object_spec.rb +7 -7
- data/spec/bullet/ext/string_spec.rb +5 -5
- data/spec/bullet/notification/base_spec.rb +32 -32
- data/spec/bullet/notification/counter_cache_spec.rb +2 -2
- data/spec/bullet/notification/n_plus_one_query_spec.rb +2 -2
- data/spec/bullet/notification/unused_eager_loading_spec.rb +2 -2
- data/spec/bullet/notification_collector_spec.rb +10 -10
- data/spec/bullet/rack_spec.rb +46 -46
- data/spec/bullet/registry/association_spec.rb +10 -10
- data/spec/bullet/registry/base_spec.rb +20 -20
- data/spec/bullet/registry/object_spec.rb +4 -4
- data/spec/integration/active_record/association_spec.rb +101 -101
- data/spec/integration/counter_cache_spec.rb +12 -12
- data/spec/integration/mongoid/association_spec.rb +33 -33
- data/spec/models/comment.rb +1 -1
- data/spec/models/document.rb +2 -2
- data/spec/models/mongoid/address.rb +1 -1
- data/spec/models/mongoid/category.rb +2 -2
- data/spec/models/mongoid/comment.rb +1 -1
- data/spec/models/mongoid/company.rb +1 -1
- data/spec/models/mongoid/entry.rb +1 -1
- data/spec/models/mongoid/post.rb +3 -3
- data/spec/models/newspaper.rb +1 -1
- data/spec/spec_helper.rb +12 -12
- data/spec/support/mongo_seed.rb +6 -6
- data/spec/support/rack_double.rb +2 -2
- data/spec/support/sqlite_seed.rb +6 -6
- data/tasks/bullet_tasks.rake +2 -2
- metadata +2 -2
@@ -5,8 +5,8 @@ module Bullet
|
|
5
5
|
describe CounterCache do
|
6
6
|
subject { CounterCache.new(Post, [:comments, :votes]) }
|
7
7
|
|
8
|
-
it { expect(subject.body).to eq(
|
9
|
-
it { expect(subject.title).to eq(
|
8
|
+
it { expect(subject.body).to eq(' Post => [:comments, :votes]') }
|
9
|
+
it { expect(subject.title).to eq('Need Counter Cache') }
|
10
10
|
end
|
11
11
|
end
|
12
12
|
end
|
@@ -3,12 +3,12 @@ require 'spec_helper'
|
|
3
3
|
module Bullet
|
4
4
|
module Notification
|
5
5
|
describe NPlusOneQuery do
|
6
|
-
subject { NPlusOneQuery.new([[
|
6
|
+
subject { NPlusOneQuery.new([['caller1', 'caller2']], Post, [:comments, :votes], 'path') }
|
7
7
|
|
8
8
|
it { expect(subject.body_with_caller).to eq(" Post => [:comments, :votes]\n Add to your finder: :includes => [:comments, :votes]\nCall stack\n caller1\n caller2\n") }
|
9
9
|
it { expect([subject.body_with_caller, subject.body_with_caller]).to eq([ " Post => [:comments, :votes]\n Add to your finder: :includes => [:comments, :votes]\nCall stack\n caller1\n caller2\n", " Post => [:comments, :votes]\n Add to your finder: :includes => [:comments, :votes]\nCall stack\n caller1\n caller2\n" ]) }
|
10
10
|
it { expect(subject.body).to eq(" Post => [:comments, :votes]\n Add to your finder: :includes => [:comments, :votes]") }
|
11
|
-
it { expect(subject.title).to eq(
|
11
|
+
it { expect(subject.title).to eq('USE eager loading in path') }
|
12
12
|
end
|
13
13
|
end
|
14
14
|
end
|
@@ -3,10 +3,10 @@ require 'spec_helper'
|
|
3
3
|
module Bullet
|
4
4
|
module Notification
|
5
5
|
describe UnusedEagerLoading do
|
6
|
-
subject { UnusedEagerLoading.new([
|
6
|
+
subject { UnusedEagerLoading.new([''], Post, [:comments, :votes], 'path') }
|
7
7
|
|
8
8
|
it { expect(subject.body).to eq(" Post => [:comments, :votes]\n Remove from your finder: :includes => [:comments, :votes]") }
|
9
|
-
it { expect(subject.title).to eq(
|
9
|
+
it { expect(subject.title).to eq('AVOID eager loading in path') }
|
10
10
|
end
|
11
11
|
end
|
12
12
|
end
|
@@ -2,28 +2,28 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
module Bullet
|
4
4
|
describe NotificationCollector do
|
5
|
-
subject { NotificationCollector.new.tap { |collector| collector.add(
|
5
|
+
subject { NotificationCollector.new.tap { |collector| collector.add('value') } }
|
6
6
|
|
7
|
-
context
|
8
|
-
it
|
9
|
-
subject.add(
|
10
|
-
expect(subject.collection).to be_include(
|
7
|
+
context '#add' do
|
8
|
+
it 'should add a value' do
|
9
|
+
subject.add('value1')
|
10
|
+
expect(subject.collection).to be_include('value1')
|
11
11
|
end
|
12
12
|
end
|
13
13
|
|
14
|
-
context
|
15
|
-
it
|
14
|
+
context '#reset' do
|
15
|
+
it 'should reset collector' do
|
16
16
|
subject.reset
|
17
17
|
expect(subject.collection).to be_empty
|
18
18
|
end
|
19
19
|
end
|
20
20
|
|
21
|
-
context
|
22
|
-
it
|
21
|
+
context '#notifications_present?' do
|
22
|
+
it 'should be true if collection is not empty' do
|
23
23
|
expect(subject).to be_notifications_present
|
24
24
|
end
|
25
25
|
|
26
|
-
it
|
26
|
+
it 'should be false if collection is empty' do
|
27
27
|
subject.reset
|
28
28
|
expect(subject).not_to be_notifications_present
|
29
29
|
end
|
data/spec/bullet/rack_spec.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
|
1
|
+
|
2
2
|
require 'spec_helper'
|
3
3
|
|
4
4
|
module Bullet
|
@@ -6,120 +6,120 @@ module Bullet
|
|
6
6
|
let(:middleware) { Bullet::Rack.new app }
|
7
7
|
let(:app) { Support::AppDouble.new }
|
8
8
|
|
9
|
-
context
|
10
|
-
it
|
11
|
-
headers = {
|
12
|
-
response = double(:body =>
|
9
|
+
context '#html_request?' do
|
10
|
+
it 'should be true if Content-Type is text/html and http body contains html tag' do
|
11
|
+
headers = {'Content-Type' => 'text/html'}
|
12
|
+
response = double(:body => '<html><head></head><body></body></html>')
|
13
13
|
expect(middleware).to be_html_request(headers, response)
|
14
14
|
end
|
15
15
|
|
16
|
-
it
|
17
|
-
headers = {
|
16
|
+
it 'should be true if Content-Type is text/html and http body contains html tag with attributes' do
|
17
|
+
headers = {'Content-Type' => 'text/html'}
|
18
18
|
response = double(:body => "<html attr='hello'><head></head><body></body></html>")
|
19
19
|
expect(middleware).to be_html_request(headers, response)
|
20
20
|
end
|
21
21
|
|
22
|
-
it
|
22
|
+
it 'should be false if there is no Content-Type header' do
|
23
23
|
headers = {}
|
24
|
-
response = double(:body =>
|
24
|
+
response = double(:body => '<html><head></head><body></body></html>')
|
25
25
|
expect(middleware).not_to be_html_request(headers, response)
|
26
26
|
end
|
27
27
|
|
28
|
-
it
|
29
|
-
headers = {
|
30
|
-
response = double(:body =>
|
28
|
+
it 'should be false if Content-Type is javascript' do
|
29
|
+
headers = {'Content-Type' => 'text/javascript'}
|
30
|
+
response = double(:body => '<html><head></head><body></body></html>')
|
31
31
|
expect(middleware).not_to be_html_request(headers, response)
|
32
32
|
end
|
33
33
|
|
34
34
|
it "should be false if response body doesn't contain html tag" do
|
35
|
-
headers = {
|
36
|
-
response = double(:body =>
|
35
|
+
headers = {'Content-Type' => 'text/html'}
|
36
|
+
response = double(:body => '<div>Partial</div>')
|
37
37
|
expect(middleware).not_to be_html_request(headers, response)
|
38
38
|
end
|
39
39
|
end
|
40
40
|
|
41
|
-
context
|
42
|
-
it
|
43
|
-
response = double(:body =>
|
41
|
+
context 'empty?' do
|
42
|
+
it 'should be false if response is a string and not empty' do
|
43
|
+
response = double(:body => '<html><head></head><body></body></html>')
|
44
44
|
expect(middleware).not_to be_empty(response)
|
45
45
|
end
|
46
46
|
|
47
|
-
it
|
48
|
-
response = [
|
47
|
+
it 'should be true if response is not found' do
|
48
|
+
response = ['Not Found']
|
49
49
|
expect(middleware).to be_empty(response)
|
50
50
|
end
|
51
51
|
|
52
|
-
it
|
53
|
-
response = double(:body =>
|
52
|
+
it 'should be true if response body is empty' do
|
53
|
+
response = double(:body => '')
|
54
54
|
expect(middleware).to be_empty(response)
|
55
55
|
end
|
56
56
|
end
|
57
57
|
|
58
|
-
context
|
59
|
-
context
|
60
|
-
it
|
61
|
-
expected_response = Support::ResponseDouble.new
|
58
|
+
context '#call' do
|
59
|
+
context 'when Bullet is enabled' do
|
60
|
+
it 'should return original response body' do
|
61
|
+
expected_response = Support::ResponseDouble.new 'Actual body'
|
62
62
|
app.response = expected_response
|
63
63
|
_, _, response = middleware.call({})
|
64
64
|
expect(response).to eq(expected_response)
|
65
65
|
end
|
66
66
|
|
67
|
-
it
|
67
|
+
it 'should change response body if notification is active' do
|
68
68
|
expect(Bullet).to receive(:notification?).and_return(true)
|
69
|
-
expect(Bullet).to receive(:gather_inline_notifications).and_return(
|
69
|
+
expect(Bullet).to receive(:gather_inline_notifications).and_return('<bullet></bullet>')
|
70
70
|
expect(Bullet).to receive(:perform_out_of_channel_notifications)
|
71
|
-
status, headers, response = middleware.call({
|
72
|
-
expect(headers[
|
73
|
-
expect(response).to eq([
|
71
|
+
status, headers, response = middleware.call({'Content-Type' => 'text/html'})
|
72
|
+
expect(headers['Content-Length']).to eq('56')
|
73
|
+
expect(response).to eq(['<html><head></head><body><bullet></bullet></body></html>'])
|
74
74
|
end
|
75
75
|
|
76
|
-
it
|
76
|
+
it 'should set the right Content-Length if response body contains accents' do
|
77
77
|
response = Support::ResponseDouble.new
|
78
|
-
response.body =
|
78
|
+
response.body = '<html><head></head><body>é</body></html>'
|
79
79
|
app.response = response
|
80
80
|
expect(Bullet).to receive(:notification?).and_return(true)
|
81
|
-
expect(Bullet).to receive(:gather_inline_notifications).and_return(
|
82
|
-
status, headers, response = middleware.call({
|
83
|
-
expect(headers[
|
81
|
+
expect(Bullet).to receive(:gather_inline_notifications).and_return('<bullet></bullet>')
|
82
|
+
status, headers, response = middleware.call({'Content-Type' => 'text/html'})
|
83
|
+
expect(headers['Content-Length']).to eq('58')
|
84
84
|
end
|
85
85
|
end
|
86
86
|
|
87
|
-
context
|
87
|
+
context 'when Bullet is disabled' do
|
88
88
|
before(:each) { allow(Bullet).to receive(:enable?).and_return(false) }
|
89
89
|
|
90
|
-
it
|
90
|
+
it 'should not call Bullet.start_request' do
|
91
91
|
expect(Bullet).not_to receive(:start_request)
|
92
92
|
middleware.call({})
|
93
93
|
end
|
94
94
|
end
|
95
95
|
end
|
96
96
|
|
97
|
-
describe
|
97
|
+
describe '#response_body' do
|
98
98
|
let(:response) { double }
|
99
|
-
let(:body_string) {
|
99
|
+
let(:body_string) { '<html><body>My Body</body></html>' }
|
100
100
|
|
101
|
-
context
|
101
|
+
context 'when `response` responds to `body`' do
|
102
102
|
before { allow(response).to receive(:body).and_return(body) }
|
103
103
|
|
104
|
-
context
|
104
|
+
context 'when `body` returns an Array' do
|
105
105
|
let(:body) { [body_string, 'random string'] }
|
106
|
-
it
|
106
|
+
it 'should return the plain body string' do
|
107
107
|
expect(middleware.response_body(response)).to eq body_string
|
108
108
|
end
|
109
109
|
end
|
110
110
|
|
111
|
-
context
|
111
|
+
context 'when `body` does not return an Array' do
|
112
112
|
let(:body) { body_string }
|
113
|
-
it
|
113
|
+
it 'should return the plain body string' do
|
114
114
|
expect(middleware.response_body(response)).to eq body_string
|
115
115
|
end
|
116
116
|
end
|
117
117
|
end
|
118
118
|
|
119
|
-
context
|
119
|
+
context 'when `response` does not respond to `body`' do
|
120
120
|
before { allow(response).to receive(:first).and_return(body_string) }
|
121
121
|
|
122
|
-
it
|
122
|
+
it 'should return the plain body string' do
|
123
123
|
expect(middleware.response_body(response)).to eq body_string
|
124
124
|
end
|
125
125
|
end
|
@@ -3,22 +3,22 @@ require 'spec_helper'
|
|
3
3
|
module Bullet
|
4
4
|
module Registry
|
5
5
|
describe Association do
|
6
|
-
subject { Association.new.tap { |association| association.add([
|
6
|
+
subject { Association.new.tap { |association| association.add(['key1', 'key2'], 'value') } }
|
7
7
|
|
8
|
-
context
|
9
|
-
it
|
10
|
-
subject.merge(
|
11
|
-
expect(subject[
|
8
|
+
context '#merge' do
|
9
|
+
it 'should merge key/value' do
|
10
|
+
subject.merge('key0', 'value0')
|
11
|
+
expect(subject['key0']).to be_include('value0')
|
12
12
|
end
|
13
13
|
end
|
14
14
|
|
15
|
-
context
|
16
|
-
it
|
17
|
-
expect(subject.similarly_associated(
|
15
|
+
context '#similarly_associated' do
|
16
|
+
it 'should return similarly associated keys' do
|
17
|
+
expect(subject.similarly_associated('key1', Set.new(['value']))).to eq(['key1', 'key2'])
|
18
18
|
end
|
19
19
|
|
20
|
-
it
|
21
|
-
expect(subject.similarly_associated(
|
20
|
+
it 'should return empty if key does not exist' do
|
21
|
+
expect(subject.similarly_associated('key3', Set.new(['value']))).to be_empty
|
22
22
|
end
|
23
23
|
end
|
24
24
|
end
|
@@ -3,40 +3,40 @@ require 'spec_helper'
|
|
3
3
|
module Bullet
|
4
4
|
module Registry
|
5
5
|
describe Base do
|
6
|
-
subject { Base.new.tap { |base| base.add(
|
6
|
+
subject { Base.new.tap { |base| base.add('key', 'value') } }
|
7
7
|
|
8
|
-
context
|
9
|
-
it
|
10
|
-
expect(subject[
|
8
|
+
context '#[]' do
|
9
|
+
it 'should get value by key' do
|
10
|
+
expect(subject['key']).to eq(Set.new(['value']))
|
11
11
|
end
|
12
12
|
end
|
13
13
|
|
14
|
-
context
|
15
|
-
it
|
16
|
-
subject.delete(
|
17
|
-
expect(subject[
|
14
|
+
context '#delete' do
|
15
|
+
it 'should delete key' do
|
16
|
+
subject.delete('key')
|
17
|
+
expect(subject['key']).to be_nil
|
18
18
|
end
|
19
19
|
end
|
20
20
|
|
21
|
-
context
|
22
|
-
it
|
23
|
-
subject.add(
|
24
|
-
expect(subject[
|
21
|
+
context '#add' do
|
22
|
+
it 'should add value with string' do
|
23
|
+
subject.add('key', 'new_value')
|
24
|
+
expect(subject['key']).to eq(Set.new(['value', 'new_value']))
|
25
25
|
end
|
26
26
|
|
27
|
-
it
|
28
|
-
subject.add(
|
29
|
-
expect(subject[
|
27
|
+
it 'should add value with array' do
|
28
|
+
subject.add('key', ['value1', 'value2'])
|
29
|
+
expect(subject['key']).to eq(Set.new(['value', 'value1', 'value2']))
|
30
30
|
end
|
31
31
|
end
|
32
32
|
|
33
|
-
context
|
34
|
-
it
|
35
|
-
expect(subject.include?(
|
33
|
+
context '#include?' do
|
34
|
+
it 'should include key/value' do
|
35
|
+
expect(subject.include?('key', 'value')).to eq true
|
36
36
|
end
|
37
37
|
|
38
|
-
it
|
39
|
-
expect(subject.include?(
|
38
|
+
it 'should not include wrong key/value' do
|
39
|
+
expect(subject.include?('key', 'val')).to eq false
|
40
40
|
end
|
41
41
|
end
|
42
42
|
end
|
@@ -7,14 +7,14 @@ module Bullet
|
|
7
7
|
let(:another_post) { Post.last }
|
8
8
|
subject { Object.new.tap { |object| object.add(post.bullet_key) } }
|
9
9
|
|
10
|
-
context
|
11
|
-
it
|
10
|
+
context '#include?' do
|
11
|
+
it 'should include the object' do
|
12
12
|
expect(subject).to be_include(post.bullet_key)
|
13
13
|
end
|
14
14
|
end
|
15
15
|
|
16
|
-
context
|
17
|
-
it
|
16
|
+
context '#add' do
|
17
|
+
it 'should add an object' do
|
18
18
|
subject.add(another_post.bullet_key)
|
19
19
|
expect(subject).to be_include(another_post.bullet_key)
|
20
20
|
end
|
@@ -2,8 +2,8 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
if active_record?
|
4
4
|
describe Bullet::Detector::Association, 'has_many' do
|
5
|
-
context
|
6
|
-
it
|
5
|
+
context 'post => comments' do
|
6
|
+
it 'should detect non preload post => comments' do
|
7
7
|
Post.all.each do |post|
|
8
8
|
post.comments.map(&:name)
|
9
9
|
end
|
@@ -13,8 +13,8 @@ if active_record?
|
|
13
13
|
expect(Bullet::Detector::Association).to be_detecting_unpreloaded_association_for(Post, :comments)
|
14
14
|
end
|
15
15
|
|
16
|
-
it
|
17
|
-
Post.find_by_sql(
|
16
|
+
it 'should detect non preload post => comments for find_by_sql' do
|
17
|
+
Post.find_by_sql('SELECT * FROM posts').each do |post|
|
18
18
|
post.comments.map(&:name)
|
19
19
|
end
|
20
20
|
Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
|
@@ -23,7 +23,7 @@ if active_record?
|
|
23
23
|
expect(Bullet::Detector::Association).to be_detecting_unpreloaded_association_for(Post, :comments)
|
24
24
|
end
|
25
25
|
|
26
|
-
it
|
26
|
+
it 'should detect preload with post => comments' do
|
27
27
|
Post.includes(:comments).each do |post|
|
28
28
|
post.comments.map(&:name)
|
29
29
|
end
|
@@ -33,7 +33,7 @@ if active_record?
|
|
33
33
|
expect(Bullet::Detector::Association).to be_completely_preloading_associations
|
34
34
|
end
|
35
35
|
|
36
|
-
it
|
36
|
+
it 'should detect unused preload post => comments' do
|
37
37
|
Post.includes(:comments).map(&:name)
|
38
38
|
Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
|
39
39
|
expect(Bullet::Detector::Association).to be_unused_preload_associations_for(Post, :comments)
|
@@ -41,7 +41,7 @@ if active_record?
|
|
41
41
|
expect(Bullet::Detector::Association).to be_completely_preloading_associations
|
42
42
|
end
|
43
43
|
|
44
|
-
it
|
44
|
+
it 'should not detect unused preload post => comments' do
|
45
45
|
Post.all.map(&:name)
|
46
46
|
Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
|
47
47
|
expect(Bullet::Detector::Association).not_to be_has_unused_preload_associations
|
@@ -49,7 +49,7 @@ if active_record?
|
|
49
49
|
expect(Bullet::Detector::Association).to be_completely_preloading_associations
|
50
50
|
end
|
51
51
|
|
52
|
-
it
|
52
|
+
it 'should detect non preload comment => post with inverse_of' do
|
53
53
|
Post.includes(:comments).each do |post|
|
54
54
|
post.comments.each do |comment|
|
55
55
|
comment.name
|
@@ -62,7 +62,7 @@ if active_record?
|
|
62
62
|
expect(Bullet::Detector::Association).to be_completely_preloading_associations
|
63
63
|
end
|
64
64
|
|
65
|
-
it
|
65
|
+
it 'should detect non preload post => comments with empty?' do
|
66
66
|
Post.all.each do |post|
|
67
67
|
post.comments.empty?
|
68
68
|
end
|
@@ -72,7 +72,7 @@ if active_record?
|
|
72
72
|
expect(Bullet::Detector::Association).to be_detecting_unpreloaded_association_for(Post, :comments)
|
73
73
|
end
|
74
74
|
|
75
|
-
it
|
75
|
+
it 'should detect non preload post => comments with include?' do
|
76
76
|
comment = Comment.last
|
77
77
|
Post.all.each do |post|
|
78
78
|
post.comments.include?(comment)
|
@@ -83,7 +83,7 @@ if active_record?
|
|
83
83
|
expect(Bullet::Detector::Association).to be_detecting_unpreloaded_association_for(Post, :comments)
|
84
84
|
end
|
85
85
|
|
86
|
-
it
|
86
|
+
it 'should not detect unused preload person => pets with empty?' do
|
87
87
|
Person.all.each do |person|
|
88
88
|
person.pets.empty?
|
89
89
|
end
|
@@ -94,8 +94,8 @@ if active_record?
|
|
94
94
|
end
|
95
95
|
end
|
96
96
|
|
97
|
-
context
|
98
|
-
it
|
97
|
+
context 'category => posts => comments' do
|
98
|
+
it 'should detect non preload category => posts => comments' do
|
99
99
|
Category.all.each do |category|
|
100
100
|
category.posts.each do |post|
|
101
101
|
post.comments.map(&:name)
|
@@ -108,7 +108,7 @@ if active_record?
|
|
108
108
|
expect(Bullet::Detector::Association).to be_detecting_unpreloaded_association_for(Post, :comments)
|
109
109
|
end
|
110
110
|
|
111
|
-
it
|
111
|
+
it 'should detect preload category => posts, but no post => comments' do
|
112
112
|
Category.includes(:posts).each do |category|
|
113
113
|
category.posts.each do |post|
|
114
114
|
post.comments.map(&:name)
|
@@ -121,7 +121,7 @@ if active_record?
|
|
121
121
|
expect(Bullet::Detector::Association).to be_detecting_unpreloaded_association_for(Post, :comments)
|
122
122
|
end
|
123
123
|
|
124
|
-
it
|
124
|
+
it 'should detect preload with category => posts => comments' do
|
125
125
|
Category.includes({:posts => :comments}).each do |category|
|
126
126
|
category.posts.each do |post|
|
127
127
|
post.comments.map(&:name)
|
@@ -133,7 +133,7 @@ if active_record?
|
|
133
133
|
expect(Bullet::Detector::Association).to be_completely_preloading_associations
|
134
134
|
end
|
135
135
|
|
136
|
-
it
|
136
|
+
it 'should detect preload with category => posts => comments with posts.id > 0' do
|
137
137
|
Category.includes({:posts => :comments}).where('posts.id > 0').references(:posts).each do |category|
|
138
138
|
category.posts.each do |post|
|
139
139
|
post.comments.map(&:name)
|
@@ -145,7 +145,7 @@ if active_record?
|
|
145
145
|
expect(Bullet::Detector::Association).to be_completely_preloading_associations
|
146
146
|
end
|
147
147
|
|
148
|
-
it
|
148
|
+
it 'should detect unused preload with category => posts => comments' do
|
149
149
|
Category.includes({:posts => :comments}).map(&:name)
|
150
150
|
Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
|
151
151
|
expect(Bullet::Detector::Association).to be_unused_preload_associations_for(Post, :comments)
|
@@ -153,7 +153,7 @@ if active_record?
|
|
153
153
|
expect(Bullet::Detector::Association).to be_completely_preloading_associations
|
154
154
|
end
|
155
155
|
|
156
|
-
it
|
156
|
+
it 'should detect unused preload with post => commnets, no category => posts' do
|
157
157
|
Category.includes({:posts => :comments}).each do |category|
|
158
158
|
category.posts.map(&:name)
|
159
159
|
end
|
@@ -164,8 +164,8 @@ if active_record?
|
|
164
164
|
end
|
165
165
|
end
|
166
166
|
|
167
|
-
context
|
168
|
-
it
|
167
|
+
context 'category => posts, category => entries' do
|
168
|
+
it 'should detect non preload with category => [posts, entries]' do
|
169
169
|
Category.all.each do |category|
|
170
170
|
category.posts.map(&:name)
|
171
171
|
category.entries.map(&:name)
|
@@ -177,7 +177,7 @@ if active_record?
|
|
177
177
|
expect(Bullet::Detector::Association).to be_detecting_unpreloaded_association_for(Category, :entries)
|
178
178
|
end
|
179
179
|
|
180
|
-
it
|
180
|
+
it 'should detect preload with category => posts, but not with category => entries' do
|
181
181
|
Category.includes(:posts).each do |category|
|
182
182
|
category.posts.map(&:name)
|
183
183
|
category.entries.map(&:name)
|
@@ -189,7 +189,7 @@ if active_record?
|
|
189
189
|
expect(Bullet::Detector::Association).to be_detecting_unpreloaded_association_for(Category, :entries)
|
190
190
|
end
|
191
191
|
|
192
|
-
it
|
192
|
+
it 'should detect preload with category => [posts, entries]' do
|
193
193
|
Category.includes([:posts, :entries]).each do |category|
|
194
194
|
category.posts.map(&:name)
|
195
195
|
category.entries.map(&:name)
|
@@ -200,7 +200,7 @@ if active_record?
|
|
200
200
|
expect(Bullet::Detector::Association).to be_completely_preloading_associations
|
201
201
|
end
|
202
202
|
|
203
|
-
it
|
203
|
+
it 'should detect unused preload with category => [posts, entries]' do
|
204
204
|
Category.includes([:posts, :entries]).map(&:name)
|
205
205
|
Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
|
206
206
|
expect(Bullet::Detector::Association).to be_unused_preload_associations_for(Category, :posts)
|
@@ -209,7 +209,7 @@ if active_record?
|
|
209
209
|
expect(Bullet::Detector::Association).to be_completely_preloading_associations
|
210
210
|
end
|
211
211
|
|
212
|
-
it
|
212
|
+
it 'should detect unused preload with category => entries, but not with category => posts' do
|
213
213
|
Category.includes([:posts, :entries]).each do |category|
|
214
214
|
category.posts.map(&:name)
|
215
215
|
end
|
@@ -221,8 +221,8 @@ if active_record?
|
|
221
221
|
end
|
222
222
|
end
|
223
223
|
|
224
|
-
context
|
225
|
-
it
|
224
|
+
context 'post => comment' do
|
225
|
+
it 'should detect unused preload with post => comments' do
|
226
226
|
Post.includes(:comments).each do |post|
|
227
227
|
post.comments.first.name if post.comments.first
|
228
228
|
end
|
@@ -232,7 +232,7 @@ if active_record?
|
|
232
232
|
expect(Bullet::Detector::Association).to be_completely_preloading_associations
|
233
233
|
end
|
234
234
|
|
235
|
-
it
|
235
|
+
it 'should detect preload with post => commnets' do
|
236
236
|
Post.first.comments.map(&:name)
|
237
237
|
Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
|
238
238
|
expect(Bullet::Detector::Association).not_to be_has_unused_preload_associations
|
@@ -240,7 +240,7 @@ if active_record?
|
|
240
240
|
expect(Bullet::Detector::Association).to be_completely_preloading_associations
|
241
241
|
end
|
242
242
|
|
243
|
-
it
|
243
|
+
it 'should not detect unused preload with category => posts' do
|
244
244
|
category = Category.first
|
245
245
|
category.draft_post.destroy!
|
246
246
|
post = category.draft_post
|
@@ -255,9 +255,9 @@ if active_record?
|
|
255
255
|
end
|
256
256
|
end
|
257
257
|
|
258
|
-
context
|
259
|
-
it
|
260
|
-
category = Category.includes({:posts => :writer}).order(
|
258
|
+
context 'category => posts => writer' do
|
259
|
+
it 'should not detect unused preload associations' do
|
260
|
+
category = Category.includes({:posts => :writer}).order('id DESC').find_by_name('first')
|
261
261
|
category.posts.map do |post|
|
262
262
|
post.name
|
263
263
|
post.writer.name
|
@@ -268,8 +268,8 @@ if active_record?
|
|
268
268
|
end
|
269
269
|
end
|
270
270
|
|
271
|
-
context
|
272
|
-
it
|
271
|
+
context 'scope for_category_name' do
|
272
|
+
it 'should detect preload with post => category' do
|
273
273
|
Post.in_category_name('first').references(:categories).each do |post|
|
274
274
|
post.category.name
|
275
275
|
end
|
@@ -279,7 +279,7 @@ if active_record?
|
|
279
279
|
expect(Bullet::Detector::Association).to be_completely_preloading_associations
|
280
280
|
end
|
281
281
|
|
282
|
-
it
|
282
|
+
it 'should not be unused preload post => category' do
|
283
283
|
Post.in_category_name('first').references(:categories).map(&:name)
|
284
284
|
Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
|
285
285
|
expect(Bullet::Detector::Association).not_to be_has_unused_preload_associations
|
@@ -288,8 +288,8 @@ if active_record?
|
|
288
288
|
end
|
289
289
|
end
|
290
290
|
|
291
|
-
context
|
292
|
-
it
|
291
|
+
context 'scope preload_comments' do
|
292
|
+
it 'should detect preload post => comments with scope' do
|
293
293
|
Post.preload_comments.each do |post|
|
294
294
|
post.comments.map(&:name)
|
295
295
|
end
|
@@ -299,7 +299,7 @@ if active_record?
|
|
299
299
|
expect(Bullet::Detector::Association).to be_completely_preloading_associations
|
300
300
|
end
|
301
301
|
|
302
|
-
it
|
302
|
+
it 'should detect unused preload with scope' do
|
303
303
|
Post.preload_comments.map(&:name)
|
304
304
|
Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
|
305
305
|
expect(Bullet::Detector::Association).to be_unused_preload_associations_for(Post, :comments)
|
@@ -310,8 +310,8 @@ if active_record?
|
|
310
310
|
end
|
311
311
|
|
312
312
|
describe Bullet::Detector::Association, 'belongs_to' do
|
313
|
-
context
|
314
|
-
it
|
313
|
+
context 'comment => post' do
|
314
|
+
it 'should detect non preload with comment => post' do
|
315
315
|
Comment.all.each do |comment|
|
316
316
|
comment.post.name
|
317
317
|
end
|
@@ -321,7 +321,7 @@ if active_record?
|
|
321
321
|
expect(Bullet::Detector::Association).to be_detecting_unpreloaded_association_for(Comment, :post)
|
322
322
|
end
|
323
323
|
|
324
|
-
it
|
324
|
+
it 'should detect preload with one comment => post' do
|
325
325
|
Comment.first.post.name
|
326
326
|
Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
|
327
327
|
expect(Bullet::Detector::Association).not_to be_has_unused_preload_associations
|
@@ -329,7 +329,7 @@ if active_record?
|
|
329
329
|
expect(Bullet::Detector::Association).to be_completely_preloading_associations
|
330
330
|
end
|
331
331
|
|
332
|
-
it
|
332
|
+
it 'should dtect preload with comment => post' do
|
333
333
|
Comment.includes(:post).each do |comment|
|
334
334
|
comment.post.name
|
335
335
|
end
|
@@ -339,7 +339,7 @@ if active_record?
|
|
339
339
|
expect(Bullet::Detector::Association).to be_completely_preloading_associations
|
340
340
|
end
|
341
341
|
|
342
|
-
it
|
342
|
+
it 'should not detect preload with comment => post' do
|
343
343
|
Comment.all.map(&:name)
|
344
344
|
Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
|
345
345
|
expect(Bullet::Detector::Association).not_to be_has_unused_preload_associations
|
@@ -347,7 +347,7 @@ if active_record?
|
|
347
347
|
expect(Bullet::Detector::Association).to be_completely_preloading_associations
|
348
348
|
end
|
349
349
|
|
350
|
-
it
|
350
|
+
it 'should detect unused preload with comment => post' do
|
351
351
|
Comment.includes(:post).map(&:name)
|
352
352
|
Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
|
353
353
|
expect(Bullet::Detector::Association).to be_unused_preload_associations_for(Comment, :post)
|
@@ -356,8 +356,8 @@ if active_record?
|
|
356
356
|
end
|
357
357
|
end
|
358
358
|
|
359
|
-
context
|
360
|
-
it
|
359
|
+
context 'comment => post => category' do
|
360
|
+
it 'should detect non preload association with comment => post' do
|
361
361
|
Comment.all.each do |comment|
|
362
362
|
comment.post.category.name
|
363
363
|
end
|
@@ -367,7 +367,7 @@ if active_record?
|
|
367
367
|
expect(Bullet::Detector::Association).to be_detecting_unpreloaded_association_for(Comment, :post)
|
368
368
|
end
|
369
369
|
|
370
|
-
it
|
370
|
+
it 'should not detect non preload association with only one comment' do
|
371
371
|
Comment.first.post.category.name
|
372
372
|
|
373
373
|
Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
|
@@ -376,7 +376,7 @@ if active_record?
|
|
376
376
|
expect(Bullet::Detector::Association).to be_completely_preloading_associations
|
377
377
|
end
|
378
378
|
|
379
|
-
it
|
379
|
+
it 'should detect non preload association with post => category' do
|
380
380
|
Comment.includes(:post).each do |comment|
|
381
381
|
comment.post.category.name
|
382
382
|
end
|
@@ -386,7 +386,7 @@ if active_record?
|
|
386
386
|
expect(Bullet::Detector::Association).to be_detecting_unpreloaded_association_for(Post, :category)
|
387
387
|
end
|
388
388
|
|
389
|
-
it
|
389
|
+
it 'should not detect unpreload association' do
|
390
390
|
Comment.includes(:post => :category).each do |comment|
|
391
391
|
comment.post.category.name
|
392
392
|
end
|
@@ -397,9 +397,9 @@ if active_record?
|
|
397
397
|
end
|
398
398
|
end
|
399
399
|
|
400
|
-
context
|
401
|
-
it
|
402
|
-
Comment.includes([:author, :post]).where([
|
400
|
+
context 'comment => author, post => writer' do
|
401
|
+
it 'should detect non preloaded writer' do
|
402
|
+
Comment.includes([:author, :post]).where(['base_users.id = ?', BaseUser.first]).references(:base_users).each do |comment|
|
403
403
|
comment.post.writer.name
|
404
404
|
end
|
405
405
|
Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
|
@@ -408,8 +408,8 @@ if active_record?
|
|
408
408
|
expect(Bullet::Detector::Association).to be_detecting_unpreloaded_association_for(Post, :writer)
|
409
409
|
end
|
410
410
|
|
411
|
-
it
|
412
|
-
Comment.includes([:author, {:post => :writer}]).where([
|
411
|
+
it 'should detect unused preload with comment => author' do
|
412
|
+
Comment.includes([:author, {:post => :writer}]).where(['base_users.id = ?', BaseUser.first]).references(:base_users).each do |comment|
|
413
413
|
comment.post.writer.name
|
414
414
|
end
|
415
415
|
Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
|
@@ -418,7 +418,7 @@ if active_record?
|
|
418
418
|
expect(Bullet::Detector::Association).to be_completely_preloading_associations
|
419
419
|
end
|
420
420
|
|
421
|
-
it
|
421
|
+
it 'should detect non preloading with writer => newspaper' do
|
422
422
|
Comment.includes(:post => :writer).where("posts.name like '%first%'").references(:posts).each do |comment|
|
423
423
|
comment.post.writer.newspaper.name
|
424
424
|
end
|
@@ -428,7 +428,7 @@ if active_record?
|
|
428
428
|
expect(Bullet::Detector::Association).to be_detecting_unpreloaded_association_for(Writer, :newspaper)
|
429
429
|
end
|
430
430
|
|
431
|
-
it
|
431
|
+
it 'should not raise a stack error from posts to category' do
|
432
432
|
expect {
|
433
433
|
Comment.includes({:post => :category}).each do |com|
|
434
434
|
com.post.category
|
@@ -439,8 +439,8 @@ if active_record?
|
|
439
439
|
end
|
440
440
|
|
441
441
|
describe Bullet::Detector::Association, 'has_and_belongs_to_many' do
|
442
|
-
context
|
443
|
-
it
|
442
|
+
context 'students <=> teachers' do
|
443
|
+
it 'should detect non preload associations' do
|
444
444
|
Student.all.each do |student|
|
445
445
|
student.teachers.map(&:name)
|
446
446
|
end
|
@@ -450,7 +450,7 @@ if active_record?
|
|
450
450
|
expect(Bullet::Detector::Association).to be_detecting_unpreloaded_association_for(Student, :teachers)
|
451
451
|
end
|
452
452
|
|
453
|
-
it
|
453
|
+
it 'should detect preload associations' do
|
454
454
|
Student.includes(:teachers).each do |student|
|
455
455
|
student.teachers.map(&:name)
|
456
456
|
end
|
@@ -460,7 +460,7 @@ if active_record?
|
|
460
460
|
expect(Bullet::Detector::Association).to be_completely_preloading_associations
|
461
461
|
end
|
462
462
|
|
463
|
-
it
|
463
|
+
it 'should detect unused preload associations' do
|
464
464
|
Student.includes(:teachers).map(&:name)
|
465
465
|
Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
|
466
466
|
expect(Bullet::Detector::Association).to be_unused_preload_associations_for(Student, :teachers)
|
@@ -468,7 +468,7 @@ if active_record?
|
|
468
468
|
expect(Bullet::Detector::Association).to be_completely_preloading_associations
|
469
469
|
end
|
470
470
|
|
471
|
-
it
|
471
|
+
it 'should detect no unused preload associations' do
|
472
472
|
Student.all.map(&:name)
|
473
473
|
Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
|
474
474
|
expect(Bullet::Detector::Association).not_to be_has_unused_preload_associations
|
@@ -476,7 +476,7 @@ if active_record?
|
|
476
476
|
expect(Bullet::Detector::Association).to be_completely_preloading_associations
|
477
477
|
end
|
478
478
|
|
479
|
-
it
|
479
|
+
it 'should detect non preload student => teachers with empty?' do
|
480
480
|
Student.all.each do |student|
|
481
481
|
student.teachers.empty?
|
482
482
|
end
|
@@ -489,8 +489,8 @@ if active_record?
|
|
489
489
|
end
|
490
490
|
|
491
491
|
describe Bullet::Detector::Association, 'has_many :through' do
|
492
|
-
context
|
493
|
-
it
|
492
|
+
context 'firm => clients' do
|
493
|
+
it 'should detect non preload associations' do
|
494
494
|
Firm.all.each do |firm|
|
495
495
|
firm.clients.map(&:name)
|
496
496
|
end
|
@@ -500,7 +500,7 @@ if active_record?
|
|
500
500
|
expect(Bullet::Detector::Association).to be_detecting_unpreloaded_association_for(Firm, :clients)
|
501
501
|
end
|
502
502
|
|
503
|
-
it
|
503
|
+
it 'should detect preload associations' do
|
504
504
|
Firm.includes(:clients).each do |firm|
|
505
505
|
firm.clients.map(&:name)
|
506
506
|
end
|
@@ -510,7 +510,7 @@ if active_record?
|
|
510
510
|
expect(Bullet::Detector::Association).to be_completely_preloading_associations
|
511
511
|
end
|
512
512
|
|
513
|
-
it
|
513
|
+
it 'should not detect preload associations' do
|
514
514
|
Firm.all.map(&:name)
|
515
515
|
Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
|
516
516
|
expect(Bullet::Detector::Association).not_to be_has_unused_preload_associations
|
@@ -518,7 +518,7 @@ if active_record?
|
|
518
518
|
expect(Bullet::Detector::Association).to be_completely_preloading_associations
|
519
519
|
end
|
520
520
|
|
521
|
-
it
|
521
|
+
it 'should detect unused preload associations' do
|
522
522
|
Firm.includes(:clients).map(&:name)
|
523
523
|
Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
|
524
524
|
expect(Bullet::Detector::Association).to be_unused_preload_associations_for(Firm, :clients)
|
@@ -528,9 +528,9 @@ if active_record?
|
|
528
528
|
end
|
529
529
|
end
|
530
530
|
|
531
|
-
describe Bullet::Detector::Association,
|
532
|
-
context
|
533
|
-
it
|
531
|
+
describe Bullet::Detector::Association, 'has_one' do
|
532
|
+
context 'company => address' do
|
533
|
+
it 'should detect non preload association' do
|
534
534
|
Company.all.each do |company|
|
535
535
|
company.address.name
|
536
536
|
end
|
@@ -540,7 +540,7 @@ if active_record?
|
|
540
540
|
expect(Bullet::Detector::Association).to be_detecting_unpreloaded_association_for(Company, :address)
|
541
541
|
end
|
542
542
|
|
543
|
-
it
|
543
|
+
it 'should detect preload association' do
|
544
544
|
Company.includes(:address).each do |company|
|
545
545
|
company.address.name
|
546
546
|
end
|
@@ -550,7 +550,7 @@ if active_record?
|
|
550
550
|
expect(Bullet::Detector::Association).to be_completely_preloading_associations
|
551
551
|
end
|
552
552
|
|
553
|
-
it
|
553
|
+
it 'should not detect preload association' do
|
554
554
|
Company.all.map(&:name)
|
555
555
|
Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
|
556
556
|
expect(Bullet::Detector::Association).not_to be_has_unused_preload_associations
|
@@ -558,7 +558,7 @@ if active_record?
|
|
558
558
|
expect(Bullet::Detector::Association).to be_completely_preloading_associations
|
559
559
|
end
|
560
560
|
|
561
|
-
it
|
561
|
+
it 'should detect unused preload association' do
|
562
562
|
Company.includes(:address).map(&:name)
|
563
563
|
Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
|
564
564
|
expect(Bullet::Detector::Association).to be_unused_preload_associations_for(Company, :address)
|
@@ -568,8 +568,8 @@ if active_record?
|
|
568
568
|
end
|
569
569
|
end
|
570
570
|
|
571
|
-
describe Bullet::Detector::Association,
|
572
|
-
it
|
571
|
+
describe Bullet::Detector::Association, 'has_one => has_many' do
|
572
|
+
it 'should not detect preload association' do
|
573
573
|
user = User.first
|
574
574
|
user.submission.replies.map(&:name)
|
575
575
|
Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
|
@@ -579,8 +579,8 @@ if active_record?
|
|
579
579
|
end
|
580
580
|
end
|
581
581
|
|
582
|
-
describe Bullet::Detector::Association,
|
583
|
-
it
|
582
|
+
describe Bullet::Detector::Association, 'call one association that in possible objects' do
|
583
|
+
it 'should not detect preload association' do
|
584
584
|
Post.all
|
585
585
|
Post.first.comments.map(&:name)
|
586
586
|
Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
|
@@ -590,9 +590,9 @@ if active_record?
|
|
590
590
|
end
|
591
591
|
end
|
592
592
|
|
593
|
-
describe Bullet::Detector::Association,
|
594
|
-
context
|
595
|
-
context
|
593
|
+
describe Bullet::Detector::Association, 'query immediately after creation' do
|
594
|
+
context 'with save' do
|
595
|
+
context 'document => children' do
|
596
596
|
it 'should not detect non preload associations' do
|
597
597
|
document1 = Document.new
|
598
598
|
document1.children.build
|
@@ -612,8 +612,8 @@ if active_record?
|
|
612
612
|
end
|
613
613
|
end
|
614
614
|
|
615
|
-
context
|
616
|
-
context
|
615
|
+
context 'with save!' do
|
616
|
+
context 'document => children' do
|
617
617
|
it 'should not detect non preload associations' do
|
618
618
|
document1 = Document.new
|
619
619
|
document1.children.build
|
@@ -634,9 +634,9 @@ if active_record?
|
|
634
634
|
end
|
635
635
|
end
|
636
636
|
|
637
|
-
describe Bullet::Detector::Association,
|
638
|
-
context
|
639
|
-
it
|
637
|
+
describe Bullet::Detector::Association, 'STI' do
|
638
|
+
context 'page => author' do
|
639
|
+
it 'should detect non preload associations' do
|
640
640
|
Page.all.each do |page|
|
641
641
|
page.author.name
|
642
642
|
end
|
@@ -646,7 +646,7 @@ if active_record?
|
|
646
646
|
expect(Bullet::Detector::Association).to be_detecting_unpreloaded_association_for(Page, :author)
|
647
647
|
end
|
648
648
|
|
649
|
-
it
|
649
|
+
it 'should detect preload associations' do
|
650
650
|
Page.includes(:author).each do |page|
|
651
651
|
page.author.name
|
652
652
|
end
|
@@ -656,7 +656,7 @@ if active_record?
|
|
656
656
|
expect(Bullet::Detector::Association).to be_completely_preloading_associations
|
657
657
|
end
|
658
658
|
|
659
|
-
it
|
659
|
+
it 'should detect unused preload associations' do
|
660
660
|
Page.includes(:author).map(&:name)
|
661
661
|
Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
|
662
662
|
expect(Bullet::Detector::Association).to be_unused_preload_associations_for(Page, :author)
|
@@ -664,7 +664,7 @@ if active_record?
|
|
664
664
|
expect(Bullet::Detector::Association).to be_completely_preloading_associations
|
665
665
|
end
|
666
666
|
|
667
|
-
it
|
667
|
+
it 'should not detect preload associations' do
|
668
668
|
Page.all.map(&:name)
|
669
669
|
Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
|
670
670
|
expect(Bullet::Detector::Association).not_to be_has_unused_preload_associations
|
@@ -673,11 +673,11 @@ if active_record?
|
|
673
673
|
end
|
674
674
|
end
|
675
675
|
|
676
|
-
context
|
676
|
+
context 'disable n plus one query' do
|
677
677
|
before { Bullet.n_plus_one_query_enable = false }
|
678
678
|
after { Bullet.n_plus_one_query_enable = true }
|
679
679
|
|
680
|
-
it
|
680
|
+
it 'should not detect n plus one query' do
|
681
681
|
Post.all.each do |post|
|
682
682
|
post.comments.map(&:name)
|
683
683
|
end
|
@@ -687,7 +687,7 @@ if active_record?
|
|
687
687
|
expect(Bullet::Detector::Association).not_to be_has_unused_preload_associations
|
688
688
|
end
|
689
689
|
|
690
|
-
it
|
690
|
+
it 'should still detect unused eager loading' do
|
691
691
|
Post.includes(:comments).map(&:name)
|
692
692
|
Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
|
693
693
|
|
@@ -696,11 +696,11 @@ if active_record?
|
|
696
696
|
end
|
697
697
|
end
|
698
698
|
|
699
|
-
context
|
699
|
+
context 'disable unused eager loading' do
|
700
700
|
before { Bullet.unused_eager_loading_enable = false }
|
701
701
|
after { Bullet.unused_eager_loading_enable = true }
|
702
702
|
|
703
|
-
it
|
703
|
+
it 'should not detect unused eager loading' do
|
704
704
|
Post.includes(:comments).map(&:name)
|
705
705
|
Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
|
706
706
|
|
@@ -708,7 +708,7 @@ if active_record?
|
|
708
708
|
expect(Bullet::Detector::Association).not_to be_has_unused_preload_associations
|
709
709
|
end
|
710
710
|
|
711
|
-
it
|
711
|
+
it 'should still detect n plus one query' do
|
712
712
|
Post.all.each do |post|
|
713
713
|
post.comments.map(&:name)
|
714
714
|
end
|
@@ -719,11 +719,11 @@ if active_record?
|
|
719
719
|
end
|
720
720
|
end
|
721
721
|
|
722
|
-
context
|
723
|
-
before { Bullet.add_whitelist :type => :n_plus_one_query, :class_name =>
|
722
|
+
context 'whitelist n plus one query' do
|
723
|
+
before { Bullet.add_whitelist :type => :n_plus_one_query, :class_name => 'Post', :association => :comments }
|
724
724
|
after { Bullet.clear_whitelist }
|
725
725
|
|
726
|
-
it
|
726
|
+
it 'should not detect n plus one query' do
|
727
727
|
Post.all.each do |post|
|
728
728
|
post.comments.map(&:name)
|
729
729
|
end
|
@@ -733,7 +733,7 @@ if active_record?
|
|
733
733
|
expect(Bullet::Detector::Association).not_to be_has_unused_preload_associations
|
734
734
|
end
|
735
735
|
|
736
|
-
it
|
736
|
+
it 'should still detect unused eager loading' do
|
737
737
|
Post.includes(:comments).map(&:name)
|
738
738
|
Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
|
739
739
|
|
@@ -742,11 +742,11 @@ if active_record?
|
|
742
742
|
end
|
743
743
|
end
|
744
744
|
|
745
|
-
context
|
746
|
-
before { Bullet.add_whitelist :type => :unused_eager_loading, :class_name =>
|
745
|
+
context 'whitelist unused eager loading' do
|
746
|
+
before { Bullet.add_whitelist :type => :unused_eager_loading, :class_name => 'Post', :association => :comments }
|
747
747
|
after { Bullet.clear_whitelist }
|
748
748
|
|
749
|
-
it
|
749
|
+
it 'should not detect unused eager loading' do
|
750
750
|
Post.includes(:comments).map(&:name)
|
751
751
|
Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
|
752
752
|
|
@@ -754,7 +754,7 @@ if active_record?
|
|
754
754
|
expect(Bullet::Detector::Association).not_to be_has_unused_preload_associations
|
755
755
|
end
|
756
756
|
|
757
|
-
it
|
757
|
+
it 'should still detect n plus one query' do
|
758
758
|
Post.all.each do |post|
|
759
759
|
post.comments.map(&:name)
|
760
760
|
end
|