bullet 2.0.0.rc1 → 2.0.0.rc2
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.
- data/MIT-LICENSE +1 -1
- data/README.textile +1 -1
- data/README_for_rails2.textile +1 -1
- data/lib/bullet.rb +8 -5
- data/lib/bullet/version.rb +5 -0
- metadata +43 -52
- data/.rspec +0 -1
- data/Hacking.textile +0 -100
- data/Rakefile +0 -51
- data/VERSION +0 -1
- data/autotest/discover.rb +0 -1
- data/bullet.gemspec +0 -90
- data/rails/init.rb +0 -1
- data/spec/bullet/association_for_chris_spec.rb +0 -96
- data/spec/bullet/association_for_peschkaj_spec.rb +0 -86
- data/spec/bullet/association_spec.rb +0 -899
- data/spec/bullet/counter_spec.rb +0 -136
- data/spec/spec_helper.rb +0 -79
- data/tasks/bullet_tasks.rake +0 -9
data/rails/init.rb
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
require 'bullet'
|
@@ -1,96 +0,0 @@
|
|
1
|
-
require File.dirname(__FILE__) + '/../spec_helper'
|
2
|
-
|
3
|
-
ActiveRecord::Base.establish_connection(:adapter => 'sqlite3', :database => ':memory:')
|
4
|
-
# This test is just used for http://github.com/flyerhzm/bullet/issues/#issue/14
|
5
|
-
describe Bullet::Detector::Association do
|
6
|
-
|
7
|
-
describe "for chris" do
|
8
|
-
def setup_db
|
9
|
-
ActiveRecord::Schema.define(:version => 1) do
|
10
|
-
create_table :locations do |t|
|
11
|
-
t.column :name, :string
|
12
|
-
end
|
13
|
-
|
14
|
-
create_table :hotels do |t|
|
15
|
-
t.column :name, :string
|
16
|
-
t.column :location_id, :integer
|
17
|
-
end
|
18
|
-
|
19
|
-
create_table :deals do |t|
|
20
|
-
t.column :name, :string
|
21
|
-
t.column :hotel_id, :integer
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
def teardown_db
|
27
|
-
ActiveRecord::Base.connection.tables.each do |table|
|
28
|
-
ActiveRecord::Base.connection.drop_table(table)
|
29
|
-
end
|
30
|
-
end
|
31
|
-
|
32
|
-
class Location < ActiveRecord::Base
|
33
|
-
has_many :hotels
|
34
|
-
end
|
35
|
-
|
36
|
-
class Hotel < ActiveRecord::Base
|
37
|
-
belongs_to :location
|
38
|
-
has_many :deals
|
39
|
-
end
|
40
|
-
|
41
|
-
class Deal < ActiveRecord::Base
|
42
|
-
belongs_to :hotel
|
43
|
-
has_one :location, :through => :hotel
|
44
|
-
end
|
45
|
-
|
46
|
-
before(:all) do
|
47
|
-
setup_db
|
48
|
-
|
49
|
-
location1 = Location.create(:name => "location1")
|
50
|
-
location2 = Location.create(:name => "location2")
|
51
|
-
|
52
|
-
hotel1 = location1.hotels.create(:name => "hotel1")
|
53
|
-
hotel2 = location1.hotels.create(:name => "hotel2")
|
54
|
-
hotel3 = location2.hotels.create(:name => "hotel3")
|
55
|
-
hotel4 = location2.hotels.create(:name => "hotel4")
|
56
|
-
|
57
|
-
deal1 = hotel1.deals.create(:name => "deal1")
|
58
|
-
deal2 = hotel2.deals.create(:name => "deal2")
|
59
|
-
deal3 = hotel3.deals.create(:name => "deal3")
|
60
|
-
deal4 = hotel4.deals.create(:name => "deal4")
|
61
|
-
end
|
62
|
-
|
63
|
-
after(:all) do
|
64
|
-
teardown_db
|
65
|
-
end
|
66
|
-
|
67
|
-
before(:each) do
|
68
|
-
Bullet.start_request
|
69
|
-
end
|
70
|
-
|
71
|
-
after(:each) do
|
72
|
-
Bullet.end_request
|
73
|
-
end
|
74
|
-
|
75
|
-
it "should detect unpreload association from deal to hotel" do
|
76
|
-
Deal.all.each do |deal|
|
77
|
-
deal.hotel.location.name
|
78
|
-
end
|
79
|
-
Bullet::Detector::Association.should be_detecting_unpreloaded_association_for(Deal, :hotel)
|
80
|
-
end
|
81
|
-
|
82
|
-
it "should detect unpreload association from hotel to location" do
|
83
|
-
Deal.includes(:hotel).each do |deal|
|
84
|
-
deal.hotel.location.name
|
85
|
-
end
|
86
|
-
Bullet::Detector::Association.should be_detecting_unpreloaded_association_for(Hotel, :location)
|
87
|
-
end
|
88
|
-
|
89
|
-
it "should not detect unpreload association" do
|
90
|
-
Deal.includes({:hotel => :location}).each do |deal|
|
91
|
-
deal.hotel.location.name
|
92
|
-
end
|
93
|
-
Bullet::Detector::Association.should_not be_has_unused_preload_associations
|
94
|
-
end
|
95
|
-
end
|
96
|
-
end
|
@@ -1,86 +0,0 @@
|
|
1
|
-
require File.dirname(__FILE__) + '/../spec_helper'
|
2
|
-
|
3
|
-
ActiveRecord::Base.establish_connection(:adapter => 'sqlite3', :database => ':memory:')
|
4
|
-
# This test is just used for http://github.com/flyerhzm/bullet/issues#issue/20
|
5
|
-
describe Bullet::Detector::Association do
|
6
|
-
|
7
|
-
describe "for peschkaj" do
|
8
|
-
def setup_db
|
9
|
-
ActiveRecord::Schema.define(:version => 1) do
|
10
|
-
create_table :categories do |t|
|
11
|
-
t.column :name, :string
|
12
|
-
end
|
13
|
-
|
14
|
-
create_table :submissions do |t|
|
15
|
-
t.column :name, :string
|
16
|
-
t.column :category_id, :integer
|
17
|
-
t.column :user_id, :integer
|
18
|
-
end
|
19
|
-
|
20
|
-
create_table :users do |t|
|
21
|
-
t.column :name, :string
|
22
|
-
t.column :category_id, :integer
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
def teardown_db
|
28
|
-
ActiveRecord::Base.connection.tables.each do |table|
|
29
|
-
ActiveRecord::Base.connection.drop_table(table)
|
30
|
-
end
|
31
|
-
end
|
32
|
-
|
33
|
-
class Category < ActiveRecord::Base
|
34
|
-
has_many :submissions
|
35
|
-
has_many :users
|
36
|
-
end
|
37
|
-
|
38
|
-
class Submission < ActiveRecord::Base
|
39
|
-
belongs_to :category
|
40
|
-
belongs_to :user
|
41
|
-
end
|
42
|
-
|
43
|
-
class User < ActiveRecord::Base
|
44
|
-
has_one :submission
|
45
|
-
belongs_to :category
|
46
|
-
end
|
47
|
-
|
48
|
-
before(:all) do
|
49
|
-
setup_db
|
50
|
-
|
51
|
-
category1 = Category.create(:name => "category1")
|
52
|
-
category2 = Category.create(:name => "category2")
|
53
|
-
|
54
|
-
user1 = User.create(:name => 'user1', :category => category1)
|
55
|
-
user2 = User.create(:name => 'user2', :category => category1)
|
56
|
-
|
57
|
-
submission1 = category1.submissions.create(:name => "submission1", :user => user1)
|
58
|
-
submission2 = category1.submissions.create(:name => "submission2", :user => user2)
|
59
|
-
submission3 = category2.submissions.create(:name => "submission3", :user => user1)
|
60
|
-
submission4 = category2.submissions.create(:name => "submission4", :user => user2)
|
61
|
-
end
|
62
|
-
|
63
|
-
after(:all) do
|
64
|
-
teardown_db
|
65
|
-
end
|
66
|
-
|
67
|
-
before(:each) do
|
68
|
-
Bullet.start_request
|
69
|
-
end
|
70
|
-
|
71
|
-
after(:each) do
|
72
|
-
Bullet.end_request
|
73
|
-
end
|
74
|
-
|
75
|
-
it "should not detect unused preload associations" do
|
76
|
-
category = Category.includes({:submissions => :user}).order("id DESC").find_by_name('category1')
|
77
|
-
category.submissions.map do |submission|
|
78
|
-
submission.name
|
79
|
-
submission.user.name
|
80
|
-
end
|
81
|
-
Bullet::Detector::UnusedEagerAssociation.check_unused_preload_associations
|
82
|
-
Bullet::Detector::Association.should_not be_unused_preload_associations_for(Category, :submissions)
|
83
|
-
Bullet::Detector::Association.should_not be_unused_preload_associations_for(Submission, :user)
|
84
|
-
end
|
85
|
-
end
|
86
|
-
end
|
@@ -1,899 +0,0 @@
|
|
1
|
-
require File.dirname(__FILE__) + '/../spec_helper'
|
2
|
-
|
3
|
-
ActiveRecord::Base.establish_connection(:adapter => 'sqlite3', :database => ':memory:')
|
4
|
-
|
5
|
-
describe Bullet::Detector::Association, 'has_many' do
|
6
|
-
|
7
|
-
def setup_db
|
8
|
-
ActiveRecord::Schema.define(:version => 1) do
|
9
|
-
create_table :categories do |t|
|
10
|
-
t.column :name, :string
|
11
|
-
end
|
12
|
-
|
13
|
-
create_table :posts do |t|
|
14
|
-
t.column :name, :string
|
15
|
-
t.column :category_id, :integer
|
16
|
-
t.column :writer_id, :integer
|
17
|
-
end
|
18
|
-
|
19
|
-
create_table :comments do |t|
|
20
|
-
t.column :name, :string
|
21
|
-
t.column :post_id, :integer
|
22
|
-
t.column :author_id, :integer
|
23
|
-
end
|
24
|
-
|
25
|
-
create_table :entries do |t|
|
26
|
-
t.column :name, :string
|
27
|
-
t.column :category_id, :integer
|
28
|
-
end
|
29
|
-
|
30
|
-
create_table :base_users do |t|
|
31
|
-
t.column :name, :string
|
32
|
-
t.column :type, :string
|
33
|
-
t.column :newspaper_id, :integer
|
34
|
-
end
|
35
|
-
create_table :newspapers do |t|
|
36
|
-
t.column :name, :string
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
def teardown_db
|
42
|
-
ActiveRecord::Base.connection.tables.each do |table|
|
43
|
-
ActiveRecord::Base.connection.drop_table(table)
|
44
|
-
end
|
45
|
-
end
|
46
|
-
|
47
|
-
class Category < ActiveRecord::Base
|
48
|
-
has_many :posts
|
49
|
-
has_many :entries
|
50
|
-
end
|
51
|
-
|
52
|
-
class Post < ActiveRecord::Base
|
53
|
-
belongs_to :category
|
54
|
-
has_many :comments
|
55
|
-
belongs_to :writer
|
56
|
-
|
57
|
-
|
58
|
-
scope :preload_posts, lambda { includes(:comments) }
|
59
|
-
scope :in_category_name, lambda { |name|
|
60
|
-
where(['categories.name = ?', name]).includes(:category)
|
61
|
-
}
|
62
|
-
end
|
63
|
-
|
64
|
-
class Entry < ActiveRecord::Base
|
65
|
-
belongs_to :category
|
66
|
-
end
|
67
|
-
|
68
|
-
class Comment < ActiveRecord::Base
|
69
|
-
belongs_to :post
|
70
|
-
belongs_to :author, :class_name => "BaseUser"
|
71
|
-
end
|
72
|
-
|
73
|
-
class BaseUser < ActiveRecord::Base
|
74
|
-
has_many :comments
|
75
|
-
has_many :posts
|
76
|
-
belongs_to :newspaper
|
77
|
-
end
|
78
|
-
|
79
|
-
class Newspaper < ActiveRecord::Base
|
80
|
-
has_many :writers, :class_name => "BaseUser"
|
81
|
-
end
|
82
|
-
|
83
|
-
class Writer < BaseUser
|
84
|
-
end
|
85
|
-
|
86
|
-
before(:all) do
|
87
|
-
setup_db
|
88
|
-
|
89
|
-
newspaper1 = Newspaper.create(:name => "First Newspaper")
|
90
|
-
newspaper2 = Newspaper.create(:name => "Second Newspaper")
|
91
|
-
|
92
|
-
writer1 = Writer.create(:name => 'first', :newspaper => newspaper1)
|
93
|
-
writer2 = Writer.create(:name => 'second', :newspaper => newspaper2)
|
94
|
-
user1 = BaseUser.create(:name => 'third', :newspaper => newspaper1)
|
95
|
-
user2 = BaseUser.create(:name => 'fourth', :newspaper => newspaper2)
|
96
|
-
|
97
|
-
|
98
|
-
category1 = Category.create(:name => 'first')
|
99
|
-
category2 = Category.create(:name => 'second')
|
100
|
-
|
101
|
-
post1 = category1.posts.create(:name => 'first', :writer => writer1)
|
102
|
-
post1a = category1.posts.create(:name => 'like first', :writer => writer2)
|
103
|
-
post2 = category2.posts.create(:name => 'second', :writer => writer2)
|
104
|
-
|
105
|
-
comment1 = post1.comments.create(:name => 'first', :author => writer1)
|
106
|
-
comment2 = post1.comments.create(:name => 'first2', :author => writer1)
|
107
|
-
comment3 = post1.comments.create(:name => 'first3', :author => writer1)
|
108
|
-
comment4 = post1.comments.create(:name => 'second', :author => writer2)
|
109
|
-
comment8 = post1a.comments.create(:name => "like first 1", :author => writer1)
|
110
|
-
comment9 = post1a.comments.create(:name => "like first 2", :author => writer2)
|
111
|
-
comment5 = post2.comments.create(:name => 'third', :author => user1)
|
112
|
-
comment6 = post2.comments.create(:name => 'fourth', :author => user2)
|
113
|
-
comment7 = post2.comments.create(:name => 'fourth', :author => writer1)
|
114
|
-
|
115
|
-
entry1 = category1.entries.create(:name => 'first')
|
116
|
-
entry2 = category1.entries.create(:name => 'second')
|
117
|
-
end
|
118
|
-
|
119
|
-
after(:all) do
|
120
|
-
teardown_db
|
121
|
-
end
|
122
|
-
|
123
|
-
before(:each) do
|
124
|
-
Bullet.start_request
|
125
|
-
end
|
126
|
-
|
127
|
-
after(:each) do
|
128
|
-
Bullet.end_request
|
129
|
-
end
|
130
|
-
|
131
|
-
# FIXME: setup and teardown are not inherited by context
|
132
|
-
# context "for unused cases" do
|
133
|
-
#If you have the same record created twice with different includes
|
134
|
-
# the hash value get's accumulated includes, which leads to false Unused eager loading
|
135
|
-
#it "should not incorrectly mark associations as unused when multiple object instances" do
|
136
|
-
#comments_with_author = Comment.includes(:author)
|
137
|
-
#comments_with_post = Comment.includes(:post)
|
138
|
-
#comments_with_author.each { |c| c.author.name }
|
139
|
-
#comments_with_author.each { |c| c.post.name }
|
140
|
-
#Bullet::Association.check_unused_preload_associations
|
141
|
-
#Bullet::Association.should be_unused_preload_associations_for(Comment, :post)
|
142
|
-
#Bullet::Association.should be_detecting_unpreloaded_association_for(Comment, :post)
|
143
|
-
#end
|
144
|
-
|
145
|
-
# same as above with different Models being queried
|
146
|
-
#it "should not incorrectly mark associations as unused when multiple object instances different Model" do
|
147
|
-
#post_with_comments = Post.includes(:comments)
|
148
|
-
#comments_with_author = Comment.includes(:author)
|
149
|
-
#post_with_comments.each { |p| p.comments.first.author.name }
|
150
|
-
#comments_with_author.each { |c| c.name }
|
151
|
-
#Bullet::Association.check_unused_preload_associations
|
152
|
-
#Bullet::Association.should be_unused_preload_associations_for(Comment, :author)
|
153
|
-
#Bullet::Association.should be_detecting_unpreloaded_association_for(Comment, :author)
|
154
|
-
#end
|
155
|
-
|
156
|
-
# this test passes right now. But is a regression test to ensure that if only a small set of returned records
|
157
|
-
# is not used that a unused preload association error is not generated
|
158
|
-
it "should not have unused when small set of returned records are discarded" do
|
159
|
-
comments_with_author = Comment.includes(:author)
|
160
|
-
comment_collection = comments_with_author.limit(2)
|
161
|
-
comment_collection.collect { |com| com.author.name }
|
162
|
-
Bullet::Detector::UnusedEagerAssociation.check_unused_preload_associations
|
163
|
-
Bullet::Detector::Association.should_not be_unused_preload_associations_for(Comment, :author)
|
164
|
-
end
|
165
|
-
# end
|
166
|
-
|
167
|
-
|
168
|
-
# FIXME: setup and teardown are not inherited by context
|
169
|
-
# context "comments => posts => category" do
|
170
|
-
|
171
|
-
# this happens because the post isn't a possible object even though the writer is access through the post
|
172
|
-
# which leads to an 1+N queries
|
173
|
-
it "should detect unpreloaded writer" do
|
174
|
-
Comment.includes([:author, :post]).where(["base_users.id = ?", BaseUser.first]).each do |com|
|
175
|
-
com.post.writer.name
|
176
|
-
end
|
177
|
-
Bullet::Detector::Association.should be_detecting_unpreloaded_association_for(Post, :writer)
|
178
|
-
end
|
179
|
-
|
180
|
-
# this happens because the comment doesn't break down the hash into keys
|
181
|
-
# properly creating an association from comment to post
|
182
|
-
it "should detect preload of comment => post" do
|
183
|
-
comments = Comment.includes([:author, {:post => :writer}]).where(["base_users.id = ?", BaseUser.first]).each do |com|
|
184
|
-
com.post.writer.name
|
185
|
-
end
|
186
|
-
Bullet::Detector::Association.should_not be_detecting_unpreloaded_association_for(Comment, :post)
|
187
|
-
Bullet::Detector::Association.should be_completely_preloading_associations
|
188
|
-
end
|
189
|
-
|
190
|
-
it "should detect preload of post => writer" do
|
191
|
-
comments = Comment.includes([:author, {:post => :writer}]).where(["base_users.id = ?", BaseUser.first]).each do |com|
|
192
|
-
com.post.writer.name
|
193
|
-
end
|
194
|
-
Bullet::Detector::Association.should be_creating_object_association_for(comments.first, :author)
|
195
|
-
Bullet::Detector::Association.should_not be_detecting_unpreloaded_association_for(Post, :writer)
|
196
|
-
Bullet::Detector::Association.should be_completely_preloading_associations
|
197
|
-
end
|
198
|
-
|
199
|
-
# To flyerhzm: This does not detect that newspaper is unpreloaded. The association is
|
200
|
-
# not within possible objects, and thus cannot be detected as unpreloaded
|
201
|
-
it "should detect unpreloading of writer => newspaper" do
|
202
|
-
comments = Comment.all(:include => {:post => :writer}, :conditions => "posts.name like '%first%'").each do |com|
|
203
|
-
com.post.writer.newspaper.name
|
204
|
-
end
|
205
|
-
Bullet::Detector::Association.should be_detecting_unpreloaded_association_for(Writer, :newspaper)
|
206
|
-
end
|
207
|
-
|
208
|
-
# when we attempt to access category, there is an infinite overflow because load_target is hijacked leading to
|
209
|
-
# a repeating loop of calls in this test
|
210
|
-
it "should not raise a stack error from posts to category" do
|
211
|
-
lambda {
|
212
|
-
Comment.includes({:post => :category}).each do |com|
|
213
|
-
com.post.category
|
214
|
-
end
|
215
|
-
}.should_not raise_error(SystemStackError)
|
216
|
-
end
|
217
|
-
# end
|
218
|
-
|
219
|
-
# FIXME: setup and teardown are not inherited by context
|
220
|
-
# context "post => comments" do
|
221
|
-
#
|
222
|
-
### FIXME: Please double check semantic equivalence with original
|
223
|
-
it "should detect preload with post => comments" do
|
224
|
-
Post.includes(:comments).each do |post|
|
225
|
-
post.comments.collect(&:name)
|
226
|
-
end
|
227
|
-
# Bullet::Detector::Association.should_not be_has_unpreload_associations
|
228
|
-
Bullet::Detector::Association.should be_completely_preloading_associations
|
229
|
-
end
|
230
|
-
|
231
|
-
it "should detect no preload post => comments" do
|
232
|
-
Post.all.each do |post|
|
233
|
-
post.comments.collect(&:name)
|
234
|
-
end
|
235
|
-
# Bullet::Detector::Association.should be_has_unpreload_associations
|
236
|
-
Bullet::Detector::Association.should_not be_completely_preloading_associations
|
237
|
-
end
|
238
|
-
|
239
|
-
it "should detect unused preload post => comments for post" do
|
240
|
-
Post.includes(:comments).collect(&:name)
|
241
|
-
Bullet::Detector::UnusedEagerAssociation.check_unused_preload_associations
|
242
|
-
Bullet::Detector::Association.should be_has_unused_preload_associations
|
243
|
-
end
|
244
|
-
|
245
|
-
it "should detect no unused preload post => comments for post" do
|
246
|
-
Post.all.collect(&:name)
|
247
|
-
Bullet::Detector::UnusedEagerAssociation.check_unused_preload_associations
|
248
|
-
Bullet::Detector::Association.should_not be_has_unused_preload_associations
|
249
|
-
end
|
250
|
-
|
251
|
-
it "should detect no unused preload post => comments for comment" do
|
252
|
-
Post.all.each do |post|
|
253
|
-
post.comments.collect(&:name)
|
254
|
-
end
|
255
|
-
Bullet::Detector::UnusedEagerAssociation.check_unused_preload_associations
|
256
|
-
Bullet::Detector::Association.should_not be_has_unused_preload_associations
|
257
|
-
|
258
|
-
Bullet.end_request
|
259
|
-
Bullet.start_request
|
260
|
-
|
261
|
-
Post.all.each do |post|
|
262
|
-
post.comments.collect(&:name)
|
263
|
-
end
|
264
|
-
Bullet::Detector::UnusedEagerAssociation.check_unused_preload_associations
|
265
|
-
Bullet::Detector::Association.should_not be_has_unused_preload_associations
|
266
|
-
end
|
267
|
-
# end
|
268
|
-
|
269
|
-
# FIXME: setup and teardown are not inherited by context
|
270
|
-
# context "category => posts => comments" do
|
271
|
-
it "should detect preload with category => posts => comments" do
|
272
|
-
Category.includes({:posts => :comments}).each do |category|
|
273
|
-
category.posts.each do |post|
|
274
|
-
post.comments.collect(&:name)
|
275
|
-
end
|
276
|
-
end
|
277
|
-
# Bullet::Detector::Association.should_not be_has_unpreload_associations
|
278
|
-
Bullet::Detector::Association.should be_completely_preloading_associations
|
279
|
-
end
|
280
|
-
|
281
|
-
it "should detect preload category => posts, but no post => comments" do
|
282
|
-
Category.includes(:posts).each do |category|
|
283
|
-
category.posts.each do |post|
|
284
|
-
post.comments.collect(&:name)
|
285
|
-
end
|
286
|
-
end
|
287
|
-
# Bullet::Detector::Association.should be_has_unpreload_associations
|
288
|
-
Bullet::Detector::Association.should_not be_completely_preloading_associations
|
289
|
-
end
|
290
|
-
|
291
|
-
it "should detect no preload category => posts => comments" do
|
292
|
-
Category.all.each do |category|
|
293
|
-
category.posts.each do |post|
|
294
|
-
post.comments.collect(&:name)
|
295
|
-
end
|
296
|
-
end
|
297
|
-
# Bullet::Detector::Association.should be_has_unpreload_associations
|
298
|
-
Bullet::Detector::Association.should_not be_completely_preloading_associations
|
299
|
-
end
|
300
|
-
|
301
|
-
it "should detect unused preload with category => posts => comments" do
|
302
|
-
Category.includes({:posts => :comments}).collect(&:name)
|
303
|
-
Bullet::Detector::UnusedEagerAssociation.check_unused_preload_associations
|
304
|
-
Bullet::Detector::Association.should be_has_unused_preload_associations
|
305
|
-
end
|
306
|
-
|
307
|
-
it "should detect unused preload with post => commnets, no category => posts" do
|
308
|
-
Category.includes({:posts => :comments}).each do |category|
|
309
|
-
category.posts.collect(&:name)
|
310
|
-
end
|
311
|
-
Bullet::Detector::UnusedEagerAssociation.check_unused_preload_associations
|
312
|
-
Bullet::Detector::Association.should be_has_unused_preload_associations
|
313
|
-
end
|
314
|
-
|
315
|
-
it "should no detect preload with category => posts => comments" do
|
316
|
-
Category.all.each do |category|
|
317
|
-
category.posts.each do |post|
|
318
|
-
post.comments.collect(&:name)
|
319
|
-
end
|
320
|
-
end
|
321
|
-
Bullet::Detector::UnusedEagerAssociation.check_unused_preload_associations
|
322
|
-
Bullet::Detector::Association.should_not be_has_unused_preload_associations
|
323
|
-
end
|
324
|
-
# end
|
325
|
-
|
326
|
-
# FIXME: setup and teardown are not inherited by context
|
327
|
-
# context "category => posts, category => entries" do
|
328
|
-
it "should detect preload with category => [posts, entries]" do
|
329
|
-
Category.includes([:posts, :entries]).each do |category|
|
330
|
-
category.posts.collect(&:name)
|
331
|
-
category.entries.collect(&:name)
|
332
|
-
end
|
333
|
-
Bullet::Detector::Association.should be_completely_preloading_associations
|
334
|
-
end
|
335
|
-
|
336
|
-
it "should detect preload with category => posts, but no category => entries" do
|
337
|
-
Category.includes(:posts).each do |category|
|
338
|
-
category.posts.collect(&:name)
|
339
|
-
category.entries.collect(&:name)
|
340
|
-
end
|
341
|
-
Bullet::Detector::Association.should_not be_completely_preloading_associations
|
342
|
-
end
|
343
|
-
|
344
|
-
it "should detect no preload with category => [posts, entries]" do
|
345
|
-
Category.all.each do |category|
|
346
|
-
category.posts.collect(&:name)
|
347
|
-
category.entries.collect(&:name)
|
348
|
-
end
|
349
|
-
Bullet::Detector::Association.should_not be_completely_preloading_associations
|
350
|
-
end
|
351
|
-
|
352
|
-
it "should detect unused with category => [posts, entries]" do
|
353
|
-
Category.includes([:posts, :entries]).collect(&:name)
|
354
|
-
Bullet::Detector::UnusedEagerAssociation.check_unused_preload_associations
|
355
|
-
Bullet::Detector::Association.should be_has_unused_preload_associations
|
356
|
-
end
|
357
|
-
|
358
|
-
it "should detect unused preload with category => entries, but no category => posts" do
|
359
|
-
Category.includes([:posts, :entries]).each do |category|
|
360
|
-
category.posts.collect(&:name)
|
361
|
-
end
|
362
|
-
Bullet::Detector::UnusedEagerAssociation.check_unused_preload_associations
|
363
|
-
Bullet::Detector::Association.should be_has_unused_preload_associations
|
364
|
-
end
|
365
|
-
|
366
|
-
it "should detect no unused preload" do
|
367
|
-
Category.all.each do |category|
|
368
|
-
category.posts.collect(&:name)
|
369
|
-
category.entries.collect(&:name)
|
370
|
-
end
|
371
|
-
Bullet::Detector::UnusedEagerAssociation.check_unused_preload_associations
|
372
|
-
Bullet::Detector::Association.should_not be_has_unused_preload_associations
|
373
|
-
end
|
374
|
-
# end
|
375
|
-
|
376
|
-
# FIXME: setup and teardown are not inherited by context
|
377
|
-
# context "no preload" do
|
378
|
-
it "should no preload only display only one post => comment" do
|
379
|
-
Post.includes(:comments).each do |post|
|
380
|
-
post.comments.first.name
|
381
|
-
end
|
382
|
-
Bullet::Detector::Association.should be_completely_preloading_associations
|
383
|
-
end
|
384
|
-
|
385
|
-
it "should no preload only one post => commnets" do
|
386
|
-
Post.first.comments.collect(&:name)
|
387
|
-
Bullet::Detector::Association.should be_completely_preloading_associations
|
388
|
-
end
|
389
|
-
# end
|
390
|
-
|
391
|
-
# FIXME: setup and teardown are not inherited by context
|
392
|
-
# context "scope for_category_name" do
|
393
|
-
it "should detect preload with post => category" do
|
394
|
-
Post.in_category_name('first').all.each do |post|
|
395
|
-
post.category.name
|
396
|
-
end
|
397
|
-
Bullet::Detector::Association.should be_completely_preloading_associations
|
398
|
-
end
|
399
|
-
|
400
|
-
it "should not be unused preload post => category" do
|
401
|
-
Post.in_category_name('first').all.collect(&:name)
|
402
|
-
Bullet::Detector::Association.should be_completely_preloading_associations
|
403
|
-
Bullet::Detector::UnusedEagerAssociation.check_unused_preload_associations
|
404
|
-
Bullet::Detector::Association.should_not be_has_unused_preload_associations
|
405
|
-
end
|
406
|
-
# end
|
407
|
-
|
408
|
-
# FIXME: setup and teardown are not inherited by context
|
409
|
-
# context "scope preload_posts" do
|
410
|
-
it "should no preload post => comments with scope" do
|
411
|
-
Post.preload_posts.each do |post|
|
412
|
-
post.comments.collect(&:name)
|
413
|
-
end
|
414
|
-
Bullet::Detector::Association.should be_completely_preloading_associations
|
415
|
-
end
|
416
|
-
|
417
|
-
it "should unused preload with scope" do
|
418
|
-
Post.preload_posts.collect(&:name)
|
419
|
-
Bullet::Detector::Association.should be_completely_preloading_associations
|
420
|
-
Bullet::Detector::UnusedEagerAssociation.check_unused_preload_associations
|
421
|
-
Bullet::Detector::Association.should be_has_unused_preload_associations
|
422
|
-
end
|
423
|
-
# end
|
424
|
-
|
425
|
-
# FIXME: setup and teardown are not inherited by context
|
426
|
-
# context "no unused" do
|
427
|
-
it "should no unused only display only one post => comment" do
|
428
|
-
Post.includes(:comments).each do |post|
|
429
|
-
i = 0
|
430
|
-
post.comments.each do |comment|
|
431
|
-
if i == 0
|
432
|
-
comment.name
|
433
|
-
else
|
434
|
-
i += 1
|
435
|
-
end
|
436
|
-
end
|
437
|
-
end
|
438
|
-
Bullet::Detector::UnusedEagerAssociation.check_unused_preload_associations
|
439
|
-
Bullet::Detector::Association.should_not be_has_unused_preload_associations
|
440
|
-
end
|
441
|
-
# end
|
442
|
-
|
443
|
-
# FIXME: setup and teardown are not inherited by context
|
444
|
-
# context "belongs_to" do
|
445
|
-
it "should preload comments => post" do
|
446
|
-
Comment.all.each do |comment|
|
447
|
-
comment.post.name
|
448
|
-
end
|
449
|
-
Bullet::Detector::Association.should_not be_completely_preloading_associations
|
450
|
-
end
|
451
|
-
|
452
|
-
it "should no preload comment => post" do
|
453
|
-
Comment.first.post.name
|
454
|
-
Bullet::Detector::Association.should be_completely_preloading_associations
|
455
|
-
end
|
456
|
-
|
457
|
-
it "should no preload comments => post" do
|
458
|
-
Comment.includes(:post).each do |comment|
|
459
|
-
comment.post.name
|
460
|
-
end
|
461
|
-
Bullet::Detector::Association.should be_completely_preloading_associations
|
462
|
-
end
|
463
|
-
|
464
|
-
it "should detect no unused preload comments => post" do
|
465
|
-
Comment.all.collect(&:name)
|
466
|
-
Bullet::Detector::UnusedEagerAssociation.check_unused_preload_associations
|
467
|
-
Bullet::Detector::Association.should_not be_has_unused_preload_associations
|
468
|
-
end
|
469
|
-
|
470
|
-
it "should detect unused preload comments => post" do
|
471
|
-
Comment.includes(:post).collect(&:name)
|
472
|
-
Bullet::Detector::UnusedEagerAssociation.check_unused_preload_associations
|
473
|
-
Bullet::Detector::Association.should be_has_unused_preload_associations
|
474
|
-
end
|
475
|
-
|
476
|
-
it "should dectect no unused preload comments => post" do
|
477
|
-
Comment.all.each do |comment|
|
478
|
-
comment.post.name
|
479
|
-
end
|
480
|
-
Bullet::Detector::UnusedEagerAssociation.check_unused_preload_associations
|
481
|
-
Bullet::Detector::Association.should_not be_has_unused_preload_associations
|
482
|
-
end
|
483
|
-
|
484
|
-
it "should dectect no unused preload comments => post" do
|
485
|
-
Comment.includes(:post).each do |comment|
|
486
|
-
comment.post.name
|
487
|
-
end
|
488
|
-
Bullet::Detector::UnusedEagerAssociation.check_unused_preload_associations
|
489
|
-
Bullet::Detector::Association.should_not be_has_unused_preload_associations
|
490
|
-
end
|
491
|
-
# end
|
492
|
-
end
|
493
|
-
|
494
|
-
describe Bullet::Detector::Association, 'has_and_belongs_to_many' do
|
495
|
-
|
496
|
-
def setup_db
|
497
|
-
ActiveRecord::Schema.define(:version => 1) do
|
498
|
-
create_table :students do |t|
|
499
|
-
t.column :name, :string
|
500
|
-
end
|
501
|
-
|
502
|
-
create_table :teachers do |t|
|
503
|
-
t.column :name, :string
|
504
|
-
end
|
505
|
-
|
506
|
-
create_table :students_teachers, :id => false do |t|
|
507
|
-
t.column :student_id, :integer
|
508
|
-
t.column :teacher_id, :integer
|
509
|
-
end
|
510
|
-
end
|
511
|
-
end
|
512
|
-
|
513
|
-
def teardown_db
|
514
|
-
ActiveRecord::Base.connection.tables.each do |table|
|
515
|
-
ActiveRecord::Base.connection.drop_table(table)
|
516
|
-
end
|
517
|
-
end
|
518
|
-
|
519
|
-
class Student < ActiveRecord::Base
|
520
|
-
has_and_belongs_to_many :teachers
|
521
|
-
end
|
522
|
-
|
523
|
-
class Teacher < ActiveRecord::Base
|
524
|
-
has_and_belongs_to_many :students
|
525
|
-
end
|
526
|
-
|
527
|
-
before(:all) do
|
528
|
-
setup_db
|
529
|
-
student1 = Student.create(:name => 'first')
|
530
|
-
student2 = Student.create(:name => 'second')
|
531
|
-
teacher1 = Teacher.create(:name => 'first')
|
532
|
-
teacher2 = Teacher.create(:name => 'second')
|
533
|
-
student1.teachers = [teacher1, teacher2]
|
534
|
-
student2.teachers = [teacher1, teacher2]
|
535
|
-
teacher1.students << student1
|
536
|
-
teacher2.students << student2
|
537
|
-
end
|
538
|
-
|
539
|
-
after(:all) do
|
540
|
-
teardown_db
|
541
|
-
end
|
542
|
-
|
543
|
-
before(:each) do
|
544
|
-
Bullet.start_request
|
545
|
-
end
|
546
|
-
|
547
|
-
after(:each) do
|
548
|
-
Bullet.end_request
|
549
|
-
end
|
550
|
-
|
551
|
-
it "should detect unpreload associations" do
|
552
|
-
Student.all.each do |student|
|
553
|
-
student.teachers.collect(&:name)
|
554
|
-
end
|
555
|
-
Bullet::Detector::Association.should_not be_completely_preloading_associations
|
556
|
-
end
|
557
|
-
|
558
|
-
it "should detect no unpreload associations" do
|
559
|
-
Student.includes(:teachers).each do |student|
|
560
|
-
student.teachers.collect(&:name)
|
561
|
-
end
|
562
|
-
Bullet::Detector::Association.should be_completely_preloading_associations
|
563
|
-
end
|
564
|
-
|
565
|
-
it "should detect unused preload associations" do
|
566
|
-
Student.includes(:teachers).collect(&:name)
|
567
|
-
Bullet::Detector::UnusedEagerAssociation.check_unused_preload_associations
|
568
|
-
Bullet::Detector::Association.should be_has_unused_preload_associations
|
569
|
-
end
|
570
|
-
|
571
|
-
it "should detect no unused preload associations" do
|
572
|
-
Student.all.collect(&:name)
|
573
|
-
Bullet::Detector::UnusedEagerAssociation.check_unused_preload_associations
|
574
|
-
Bullet::Detector::Association.should_not be_has_unused_preload_associations
|
575
|
-
end
|
576
|
-
end
|
577
|
-
|
578
|
-
describe Bullet::Detector::Association, 'has_many :through' do
|
579
|
-
|
580
|
-
def setup_db
|
581
|
-
ActiveRecord::Schema.define(:version => 1) do
|
582
|
-
create_table :firms do |t|
|
583
|
-
t.column :name, :string
|
584
|
-
end
|
585
|
-
|
586
|
-
create_table :clients do |t|
|
587
|
-
t.column :name, :string
|
588
|
-
end
|
589
|
-
|
590
|
-
create_table :relationships do |t|
|
591
|
-
t.column :firm_id, :integer
|
592
|
-
t.column :client_id, :integer
|
593
|
-
end
|
594
|
-
end
|
595
|
-
end
|
596
|
-
|
597
|
-
def teardown_db
|
598
|
-
ActiveRecord::Base.connection.tables.each do |table|
|
599
|
-
ActiveRecord::Base.connection.drop_table(table)
|
600
|
-
end
|
601
|
-
end
|
602
|
-
|
603
|
-
class Firm < ActiveRecord::Base
|
604
|
-
has_many :relationships
|
605
|
-
has_many :clients, :through => :relationships
|
606
|
-
end
|
607
|
-
|
608
|
-
class Client < ActiveRecord::Base
|
609
|
-
has_many :relationships
|
610
|
-
has_many :firms, :through => :relationships
|
611
|
-
end
|
612
|
-
|
613
|
-
class Relationship < ActiveRecord::Base
|
614
|
-
belongs_to :firm
|
615
|
-
belongs_to :client
|
616
|
-
end
|
617
|
-
|
618
|
-
before(:all) do
|
619
|
-
setup_db
|
620
|
-
firm1 = Firm.create(:name => 'first')
|
621
|
-
firm2 = Firm.create(:name => 'second')
|
622
|
-
client1 = Client.create(:name => 'first')
|
623
|
-
client2 = Client.create(:name => 'second')
|
624
|
-
firm1.clients = [client1, client2]
|
625
|
-
firm2.clients = [client1, client2]
|
626
|
-
client1.firms << firm1
|
627
|
-
client2.firms << firm2
|
628
|
-
end
|
629
|
-
|
630
|
-
after(:all) do
|
631
|
-
teardown_db
|
632
|
-
end
|
633
|
-
|
634
|
-
before(:each) do
|
635
|
-
Bullet.start_request
|
636
|
-
end
|
637
|
-
|
638
|
-
after(:each) do
|
639
|
-
Bullet.end_request
|
640
|
-
end
|
641
|
-
|
642
|
-
it "should detect unpreload associations" do
|
643
|
-
Firm.all.each do |firm|
|
644
|
-
firm.clients.collect(&:name)
|
645
|
-
end
|
646
|
-
Bullet::Detector::Association.should_not be_completely_preloading_associations
|
647
|
-
end
|
648
|
-
|
649
|
-
it "should detect no unpreload associations" do
|
650
|
-
Firm.includes(:clients).each do |firm|
|
651
|
-
firm.clients.collect(&:name)
|
652
|
-
end
|
653
|
-
Bullet::Detector::Association.should be_completely_preloading_associations
|
654
|
-
end
|
655
|
-
|
656
|
-
it "should detect no unused preload associations" do
|
657
|
-
Firm.all.collect(&:name)
|
658
|
-
Bullet::Detector::UnusedEagerAssociation.check_unused_preload_associations
|
659
|
-
Bullet::Detector::Association.should_not be_has_unused_preload_associations
|
660
|
-
end
|
661
|
-
|
662
|
-
it "should detect unused preload associations" do
|
663
|
-
Firm.includes(:clients).collect(&:name)
|
664
|
-
Bullet::Detector::UnusedEagerAssociation.check_unused_preload_associations
|
665
|
-
Bullet::Detector::Association.should be_has_unused_preload_associations
|
666
|
-
end
|
667
|
-
end
|
668
|
-
|
669
|
-
|
670
|
-
|
671
|
-
describe Bullet::Detector::Association, "has_one" do
|
672
|
-
|
673
|
-
def setup_db
|
674
|
-
ActiveRecord::Schema.define(:version => 1) do
|
675
|
-
create_table :companies do |t|
|
676
|
-
t.column :name, :string
|
677
|
-
end
|
678
|
-
|
679
|
-
create_table :addresses do |t|
|
680
|
-
t.column :name, :string
|
681
|
-
t.column :company_id, :integer
|
682
|
-
end
|
683
|
-
end
|
684
|
-
end
|
685
|
-
|
686
|
-
def teardown_db
|
687
|
-
ActiveRecord::Base.connection.tables.each do |table|
|
688
|
-
ActiveRecord::Base.connection.drop_table(table)
|
689
|
-
end
|
690
|
-
end
|
691
|
-
|
692
|
-
class Company < ActiveRecord::Base
|
693
|
-
has_one :address
|
694
|
-
end
|
695
|
-
|
696
|
-
class Address < ActiveRecord::Base
|
697
|
-
belongs_to :company
|
698
|
-
end
|
699
|
-
|
700
|
-
before(:all) do
|
701
|
-
setup_db
|
702
|
-
|
703
|
-
company1 = Company.create(:name => 'first')
|
704
|
-
company2 = Company.create(:name => 'second')
|
705
|
-
|
706
|
-
Address.create(:name => 'first', :company => company1)
|
707
|
-
Address.create(:name => 'second', :company => company2)
|
708
|
-
end
|
709
|
-
|
710
|
-
after(:all) do
|
711
|
-
teardown_db
|
712
|
-
end
|
713
|
-
|
714
|
-
before(:each) do
|
715
|
-
Bullet.start_request
|
716
|
-
end
|
717
|
-
|
718
|
-
after(:each) do
|
719
|
-
Bullet.end_request
|
720
|
-
end
|
721
|
-
|
722
|
-
it "should detect unpreload association" do
|
723
|
-
Company.all.each do |company|
|
724
|
-
company.address.name
|
725
|
-
end
|
726
|
-
Bullet::Detector::Association.should_not be_completely_preloading_associations
|
727
|
-
end
|
728
|
-
|
729
|
-
it "should detect no unpreload association" do
|
730
|
-
Company.find(:all, :include => :address).each do |company|
|
731
|
-
company.address.name
|
732
|
-
end
|
733
|
-
Bullet::Detector::Association.should be_completely_preloading_associations
|
734
|
-
end
|
735
|
-
|
736
|
-
it "should detect no unused preload association" do
|
737
|
-
Company.all.collect(&:name)
|
738
|
-
Bullet::Detector::UnusedEagerAssociation.check_unused_preload_associations
|
739
|
-
Bullet::Detector::Association.should_not be_has_unused_preload_associations
|
740
|
-
end
|
741
|
-
|
742
|
-
it "should detect unused preload association" do
|
743
|
-
Company.find(:all, :include => :address).collect(&:name)
|
744
|
-
Bullet::Detector::UnusedEagerAssociation.check_unused_preload_associations
|
745
|
-
Bullet::Detector::Association.should be_has_unused_preload_associations
|
746
|
-
end
|
747
|
-
end
|
748
|
-
|
749
|
-
describe Bullet::Detector::Association, "call one association that in possible objects" do
|
750
|
-
|
751
|
-
def setup_db
|
752
|
-
ActiveRecord::Schema.define(:version => 1) do
|
753
|
-
create_table :contacts do |t|
|
754
|
-
t.column :name, :string
|
755
|
-
end
|
756
|
-
|
757
|
-
create_table :emails do |t|
|
758
|
-
t.column :name, :string
|
759
|
-
t.column :contact_id, :integer
|
760
|
-
end
|
761
|
-
end
|
762
|
-
end
|
763
|
-
|
764
|
-
def teardown_db
|
765
|
-
ActiveRecord::Base.connection.tables.each do |table|
|
766
|
-
ActiveRecord::Base.connection.drop_table(table)
|
767
|
-
end
|
768
|
-
end
|
769
|
-
|
770
|
-
class Contact < ActiveRecord::Base
|
771
|
-
has_many :emails
|
772
|
-
end
|
773
|
-
|
774
|
-
class Email < ActiveRecord::Base
|
775
|
-
belongs_to :contact
|
776
|
-
end
|
777
|
-
|
778
|
-
before(:all) do
|
779
|
-
setup_db
|
780
|
-
|
781
|
-
contact1 = Contact.create(:name => 'first')
|
782
|
-
contact2 = Contact.create(:name => 'second')
|
783
|
-
|
784
|
-
email1 = contact1.emails.create(:name => 'first')
|
785
|
-
email2 = contact1.emails.create(:name => 'second')
|
786
|
-
email3 = contact2.emails.create(:name => 'third')
|
787
|
-
email4 = contact2.emails.create(:name => 'fourth')
|
788
|
-
end
|
789
|
-
|
790
|
-
after(:all) do
|
791
|
-
teardown_db
|
792
|
-
end
|
793
|
-
|
794
|
-
before(:each) do
|
795
|
-
Bullet.start_request
|
796
|
-
end
|
797
|
-
|
798
|
-
after(:each) do
|
799
|
-
Bullet.end_request
|
800
|
-
end
|
801
|
-
|
802
|
-
it "should detect no unpreload association" do
|
803
|
-
Contact.all
|
804
|
-
Contact.first.emails.collect(&:name)
|
805
|
-
Bullet::Detector::Association.should be_completely_preloading_associations
|
806
|
-
end
|
807
|
-
end
|
808
|
-
|
809
|
-
describe Bullet::Detector::Association, "STI" do
|
810
|
-
|
811
|
-
def setup_db
|
812
|
-
ActiveRecord::Schema.define(:version => 1) do
|
813
|
-
create_table :documents do |t|
|
814
|
-
t.string :name
|
815
|
-
t.string :type
|
816
|
-
t.integer :parent_id
|
817
|
-
t.integer :author_id
|
818
|
-
end
|
819
|
-
|
820
|
-
create_table :authors do |t|
|
821
|
-
t.string :name
|
822
|
-
end
|
823
|
-
end
|
824
|
-
end
|
825
|
-
|
826
|
-
def teardown_db
|
827
|
-
ActiveRecord::Base.connection.tables.each do |table|
|
828
|
-
ActiveRecord::Base.connection.drop_table(table)
|
829
|
-
end
|
830
|
-
end
|
831
|
-
|
832
|
-
class Document < ActiveRecord::Base
|
833
|
-
has_many :children, :class_name => "Document", :foreign_key => 'parent_id'
|
834
|
-
belongs_to :parent, :class_name => "Document", :foreign_key => 'parent_id'
|
835
|
-
belongs_to :author
|
836
|
-
end
|
837
|
-
|
838
|
-
class Page < Document
|
839
|
-
end
|
840
|
-
|
841
|
-
class Folder < Document
|
842
|
-
end
|
843
|
-
|
844
|
-
class Author < ActiveRecord::Base
|
845
|
-
has_many :documents
|
846
|
-
end
|
847
|
-
|
848
|
-
before(:all) do
|
849
|
-
setup_db
|
850
|
-
author1 = Author.create(:name => 'author1')
|
851
|
-
author2 = Author.create(:name => 'author2')
|
852
|
-
folder1 = Folder.create(:name => 'folder1', :author_id => author1.id)
|
853
|
-
folder2 = Folder.create(:name => 'folder2', :author_id => author2.id)
|
854
|
-
page1 = Page.create(:name => 'page1', :parent_id => folder1.id, :author_id => author1.id)
|
855
|
-
page2 = Page.create(:name => 'page2', :parent_id => folder1.id, :author_id => author1.id)
|
856
|
-
page3 = Page.create(:name => 'page3', :parent_id => folder2.id, :author_id => author2.id)
|
857
|
-
page4 = Page.create(:name => 'page4', :parent_id => folder2.id, :author_id => author2.id)
|
858
|
-
end
|
859
|
-
|
860
|
-
before(:each) do
|
861
|
-
Bullet.start_request
|
862
|
-
end
|
863
|
-
|
864
|
-
after(:each) do
|
865
|
-
Bullet.end_request
|
866
|
-
end
|
867
|
-
|
868
|
-
it "should detect unpreload associations" do
|
869
|
-
Page.all.each do |page|
|
870
|
-
page.author.name
|
871
|
-
end
|
872
|
-
Bullet::Detector::Association.should_not be_completely_preloading_associations
|
873
|
-
Bullet::Detector::UnusedEagerAssociation.check_unused_preload_associations
|
874
|
-
Bullet::Detector::Association.should_not be_has_unused_preload_associations
|
875
|
-
end
|
876
|
-
|
877
|
-
it "should not detect unpreload associations" do
|
878
|
-
Page.find(:all, :include => :author).each do |page|
|
879
|
-
page.author.name
|
880
|
-
end
|
881
|
-
Bullet::Detector::Association.should be_completely_preloading_associations
|
882
|
-
Bullet::Detector::UnusedEagerAssociation.check_unused_preload_associations
|
883
|
-
Bullet::Detector::Association.should_not be_has_unused_preload_associations
|
884
|
-
end
|
885
|
-
|
886
|
-
it "should detect unused preload associations" do
|
887
|
-
Page.find(:all, :include => :author).collect(&:name)
|
888
|
-
Bullet::Detector::Association.should be_completely_preloading_associations
|
889
|
-
Bullet::Detector::UnusedEagerAssociation.check_unused_preload_associations
|
890
|
-
Bullet::Detector::Association.should be_has_unused_preload_associations
|
891
|
-
end
|
892
|
-
|
893
|
-
it "should not detect unused preload associations" do
|
894
|
-
Page.all.collect(&:name)
|
895
|
-
Bullet::Detector::Association.should be_completely_preloading_associations
|
896
|
-
Bullet::Detector::UnusedEagerAssociation.check_unused_preload_associations
|
897
|
-
Bullet::Detector::Association.should_not be_has_unused_preload_associations
|
898
|
-
end
|
899
|
-
end
|