bullet 5.1.0 → 5.1.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: f726582290756f07599b35204f8e903fd20350b3
4
- data.tar.gz: 2e4a9e95087d246cb69e887eef07868c2d9e0a63
3
+ metadata.gz: 0158f6af4990b365de2859cea97877e5b290ea83
4
+ data.tar.gz: cd8914938d74645ae75d01ee8feaf23e38f8d028
5
5
  SHA512:
6
- metadata.gz: 66c4b18f8c522a2cfa310bd8b818b177a12507c99255860881d225bac39722f35bfea65d7ea14287496f7fcf4d52d618e77ba712ebb28b2dad7a7a08909f56a8
7
- data.tar.gz: f68a5397786c67ae3aefe57ce3030133f4c0f54a253add872dc54ba83ab00c33439325b6f0ee3500a0534bddca951e95b5929a8dfc0c74d8bf5c818b204992ad
6
+ metadata.gz: 9e92c13202832afaaf604072c06e695cfe552d5626318d6c625cebacdfdc13ecc14aeed8c64d6df483b4c05caa090ecee01e613228dae6466edbe66803e7333a
7
+ data.tar.gz: 7d365b32c075a00733e4c70daedcfbca042cb2334a77c6e132fc31b33e9dd23aaca8a65eaa1578ffba2f106303cf572e84e41b7fd6c7c61a239b2dbea9fcaabe
@@ -1,6 +1,11 @@
1
1
  # Next Release
2
2
 
3
- ## 5.1.0 (05/21/2015)
3
+ ## 5.1.1
4
+
5
+ * Fix `has_cached_counter?` is not defined in HABTM #297
6
+ * Fix false alert if preloaded association has no records #260
7
+
8
+ ## 5.1.0 (05/21/2016)
4
9
 
5
10
  * Fix false alert when `empty?` used with `counter_cache`
6
11
  * Fix `alias_method_chain` deprecation for rails 5
@@ -8,7 +13,7 @@
8
13
  * Fix false alert when querying immediately after creation
9
14
  * Fix UnusedEagerLoading bug when multiple eager loading query include same objects
10
15
 
11
- ## 5.0.0 (01/06/2015)
16
+ ## 5.0.0 (01/06/2016)
12
17
 
13
18
  * Support Rails 5.0.0.beta1
14
19
  * Fix `has_many :through` infinite loop issue
data/README.md CHANGED
@@ -238,7 +238,9 @@ Bullet outputs some details info, to enable debug mode, set
238
238
 
239
239
  ## Demo
240
240
 
241
- Bullet is designed to function as you browse through your application in development. To see it in action, follow these steps to create, detect, and fix example query problems.
241
+ Bullet is designed to function as you browse through your application in development. To see it in action,
242
+ you can visit [https://github.com/flyerhzm/bullet_test](https://github.com/flyerhzm/bullet_test) or
243
+ follow these steps to create, detect, and fix example query problems.
242
244
 
243
245
  1\. Create an example application
244
246
 
@@ -458,4 +460,4 @@ Meanwhile, there's a line appended to `log/bullet.log`
458
460
  Post => [:comments]
459
461
  ```
460
462
 
461
- Copyright (c) 2009 - 2015 Richard Huang (flyerhzm@gmail.com), released under the MIT license
463
+ Copyright (c) 2009 - 2016 Richard Huang (flyerhzm@gmail.com), released under the MIT license
@@ -190,17 +190,22 @@ module Bullet
190
190
  end
191
191
 
192
192
  def profile
193
+ return_value = nil
193
194
  if Bullet.enable?
194
195
  begin
195
196
  Bullet.start_request
196
197
 
197
- yield
198
+ return_value = yield
198
199
 
199
200
  Bullet.perform_out_of_channel_notifications if Bullet.notification?
200
201
  ensure
201
202
  Bullet.end_request
202
203
  end
204
+ else
205
+ return_value = yield
203
206
  end
207
+
208
+ return_value
204
209
  end
205
210
 
206
211
  private
@@ -134,6 +134,16 @@ module Bullet
134
134
  origin_last(*args)
135
135
  end
136
136
 
137
+ alias_method :origin_include?, :include?
138
+ def include?(object)
139
+ if Bullet.start?
140
+ Bullet::Detector::NPlusOneQuery.call_association(@owner, @reflection.name)
141
+ end
142
+ origin_include?(object)
143
+ end
144
+ end
145
+
146
+ ::ActiveRecord::Associations::HasManyAssociation.class_eval do
137
147
  alias_method :origin_empty?, :empty?
138
148
  def empty?
139
149
  if Bullet.start? && !has_cached_counter?
@@ -141,13 +151,15 @@ module Bullet
141
151
  end
142
152
  origin_empty?
143
153
  end
154
+ end
144
155
 
145
- alias_method :origin_include?, :include?
146
- def include?(object)
156
+ ::ActiveRecord::Associations::HasAndBelongsToManyAssociation.class_eval do
157
+ alias_method :origin_empty?, :empty?
158
+ def empty?
147
159
  if Bullet.start?
148
160
  Bullet::Detector::NPlusOneQuery.call_association(@owner, @reflection.name)
149
161
  end
150
- origin_include?(object)
162
+ origin_empty?
151
163
  end
152
164
  end
153
165
 
@@ -116,6 +116,16 @@ module Bullet
116
116
  origin_load_target
117
117
  end
118
118
 
119
+ alias_method :origin_include?, :include?
120
+ def include?(object)
121
+ if Bullet.start?
122
+ Bullet::Detector::NPlusOneQuery.call_association(@owner, @reflection.name)
123
+ end
124
+ origin_include?(object)
125
+ end
126
+ end
127
+
128
+ ::ActiveRecord::Associations::HasManyAssociation.class_eval do
119
129
  alias_method :origin_empty?, :empty?
120
130
  def empty?
121
131
  if Bullet.start? && !has_cached_counter?(@reflection)
@@ -123,13 +133,15 @@ module Bullet
123
133
  end
124
134
  origin_empty?
125
135
  end
136
+ end
126
137
 
127
- alias_method :origin_include?, :include?
128
- def include?(object)
138
+ ::ActiveRecord::Associations::HasAndBelongsToManyAssociation.class_eval do
139
+ alias_method :origin_empty?, :empty?
140
+ def empty?
129
141
  if Bullet.start?
130
142
  Bullet::Detector::NPlusOneQuery.call_association(@owner, @reflection.name)
131
143
  end
132
- origin_include?(object)
144
+ origin_empty?
133
145
  end
134
146
  end
135
147
 
@@ -116,6 +116,16 @@ module Bullet
116
116
  origin_load_target
117
117
  end
118
118
 
119
+ alias_method :origin_include?, :include?
120
+ def include?(object)
121
+ if Bullet.start?
122
+ Bullet::Detector::NPlusOneQuery.call_association(@owner, @reflection.name)
123
+ end
124
+ origin_include?(object)
125
+ end
126
+ end
127
+
128
+ ::ActiveRecord::Associations::HasManyAssociation.class_eval do
119
129
  alias_method :origin_empty?, :empty?
120
130
  def empty?
121
131
  if Bullet.start? && !has_cached_counter?(@reflection)
@@ -123,13 +133,15 @@ module Bullet
123
133
  end
124
134
  origin_empty?
125
135
  end
136
+ end
126
137
 
127
- alias_method :origin_include?, :include?
128
- def include?(object)
138
+ ::ActiveRecord::Associations::HasAndBelongsToManyAssociation.class_eval do
139
+ alias_method :origin_empty?, :empty?
140
+ def empty?
129
141
  if Bullet.start?
130
142
  Bullet::Detector::NPlusOneQuery.call_association(@owner, @reflection.name)
131
143
  end
132
- origin_include?(object)
144
+ origin_empty?
133
145
  end
134
146
  end
135
147
 
@@ -135,7 +135,9 @@ module Bullet
135
135
  records = origin_load_target
136
136
 
137
137
  if Bullet.start?
138
- Bullet::Detector::NPlusOneQuery.call_association(@owner, @reflection.name) unless @inversed
138
+ if records.size > 1
139
+ Bullet::Detector::NPlusOneQuery.call_association(@owner, @reflection.name) unless @inversed
140
+ end
139
141
  if records.first.class.name !~ /^HABTM_/
140
142
  if records.size > 1
141
143
  Bullet::Detector::NPlusOneQuery.add_possible_objects(records)
@@ -143,7 +143,9 @@ module Bullet
143
143
  records = origin_load_target
144
144
 
145
145
  if Bullet.start?
146
- Bullet::Detector::NPlusOneQuery.call_association(@owner, @reflection.name) unless @inversed
146
+ if records.size > 1
147
+ Bullet::Detector::NPlusOneQuery.call_association(@owner, @reflection.name) unless @inversed
148
+ end
147
149
  if records.first.class.name !~ /^HABTM_/
148
150
  if records.size > 1
149
151
  Bullet::Detector::NPlusOneQuery.add_possible_objects(records)
@@ -1,4 +1,4 @@
1
1
  # encoding: utf-8
2
2
  module Bullet
3
- VERSION = "5.1.0"
3
+ VERSION = "5.1.1"
4
4
  end
@@ -214,7 +214,7 @@ if !mongoid? && active_record3?
214
214
  context "post => comment" do
215
215
  it "should detect unused preload with post => comments" do
216
216
  Post.includes(:comments).each do |post|
217
- post.comments.first.name
217
+ post.comments.first.name if post.comments.first
218
218
  end
219
219
  Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
220
220
  expect(Bullet::Detector::Association).not_to be_unused_preload_associations_for(Post, :comments)
@@ -453,6 +453,16 @@ if !mongoid? && active_record3?
453
453
 
454
454
  expect(Bullet::Detector::Association).to be_completely_preloading_associations
455
455
  end
456
+
457
+ it "should detect non preload student => teachers with empty?" do
458
+ Student.all.each do |student|
459
+ student.teachers.empty?
460
+ end
461
+ Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
462
+ expect(Bullet::Detector::Association).not_to be_has_unused_preload_associations
463
+
464
+ expect(Bullet::Detector::Association).to be_detecting_unpreloaded_association_for(Student, :teachers)
465
+ end
456
466
  end
457
467
  end
458
468
 
@@ -214,7 +214,7 @@ if !mongoid? && active_record4?
214
214
  context "post => comment" do
215
215
  it "should detect unused preload with post => comments" do
216
216
  Post.includes(:comments).each do |post|
217
- post.comments.first.name
217
+ post.comments.first.name if post.comments.first
218
218
  end
219
219
  Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
220
220
  expect(Bullet::Detector::Association).not_to be_unused_preload_associations_for(Post, :comments)
@@ -465,6 +465,16 @@ if !mongoid? && active_record4?
465
465
 
466
466
  expect(Bullet::Detector::Association).to be_completely_preloading_associations
467
467
  end
468
+
469
+ it "should detect non preload student => teachers with empty?" do
470
+ Student.all.each do |student|
471
+ student.teachers.empty?
472
+ end
473
+ Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
474
+ expect(Bullet::Detector::Association).not_to be_has_unused_preload_associations
475
+
476
+ expect(Bullet::Detector::Association).to be_detecting_unpreloaded_association_for(Student, :teachers)
477
+ end
468
478
  end
469
479
  end
470
480
 
@@ -214,7 +214,7 @@ if !mongoid? && active_record5?
214
214
  context "post => comment" do
215
215
  it "should detect unused preload with post => comments" do
216
216
  Post.includes(:comments).each do |post|
217
- post.comments.first.name
217
+ post.comments.first.name if post.comments.first
218
218
  end
219
219
  Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
220
220
  expect(Bullet::Detector::Association).not_to be_unused_preload_associations_for(Post, :comments)
@@ -465,6 +465,16 @@ if !mongoid? && active_record5?
465
465
 
466
466
  expect(Bullet::Detector::Association).to be_completely_preloading_associations
467
467
  end
468
+
469
+ it "should detect non preload student => teachers with empty?" do
470
+ Student.all.each do |student|
471
+ student.teachers.empty?
472
+ end
473
+ Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
474
+ expect(Bullet::Detector::Association).not_to be_has_unused_preload_associations
475
+
476
+ expect(Bullet::Detector::Association).to be_detecting_unpreloaded_association_for(Student, :teachers)
477
+ end
468
478
  end
469
479
  end
470
480
 
@@ -16,6 +16,7 @@ module Support
16
16
  post1 = category1.posts.create(:name => 'first', :writer => writer1)
17
17
  post1a = category1.posts.create(:name => 'like first', :writer => writer2, active: false)
18
18
  post2 = category2.posts.create(:name => 'second', :writer => writer2)
19
+ post3 = category2.posts.create(:name => 'third', :writer => writer2)
19
20
 
20
21
  comment1 = post1.comments.create(:name => 'first', :author => writer1)
21
22
  comment2 = post1.comments.create(:name => 'first2', :author => writer1)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bullet
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.1.0
4
+ version: 5.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Richard Huang
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-05-22 00:00:00.000000000 Z
11
+ date: 2016-06-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport