bullet 4.3.1 → 4.4.0

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 5e3527225d3f424d77fe6d66b89d79051ef971dd
4
- data.tar.gz: 253640c4c6ef128c0f6959b31fae2bb202d9fc3e
3
+ metadata.gz: 1ecb17e9a4a015f9ff8895fc39a7ed2bd3a5e600
4
+ data.tar.gz: a624e5f8bc8d40f8bf49eab595725ce2de0076c4
5
5
  SHA512:
6
- metadata.gz: 253164c19bb419669f1623eb724e33573a807c5a1998f78fefbdbaf5e5c69903dd3d296a17b4a1e99628b8ed1a83b635b612b46fb62ed735950e317bf6d1b93e
7
- data.tar.gz: 419bb1cabd21aff3faf417718b7d48f01b55cab86d8c2fd974fd52e471074dd3062d2bc4c2a4530ffd250e35e716b6592c61187556ec184f1999937d680e4cfe
6
+ metadata.gz: e05204d7d248ac6888897a4235b716c4c74dbf793083f1aec5a693d88d1250ab6c12854967e93096c667e7a73b9bf54cc10799fd8428c7a67d7bc1672db288a4
7
+ data.tar.gz: 4bfdcde512f2583b6285663722c526972d7263aaeffc62173f651feaca77384c9a98678518286789fe79b3923393e7bf8e76bb33b7438df4c4033ff0c08206a8
data/.travis.yml CHANGED
@@ -1,12 +1,12 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 1.9.3
3
+ - 2.0.0
4
4
  gemfile:
5
5
  - Gemfile
6
6
  - Gemfile.rails-4-beta
7
- - Gemfile.rails-3.1.5
8
- - Gemfile.rails-3.0.13
9
- - Gemfile.rails-2.3.14
7
+ - Gemfile.rails-3.2.12
8
+ - Gemfile.rails-3.1.11
9
+ - Gemfile.rails-3.0.20
10
10
  env: DB=sqlite
11
11
  services: mongodb
12
12
  before_install:
@@ -23,8 +23,8 @@ module Bullet
23
23
  # include query for one to many associations.
24
24
  # keep this eager loadings.
25
25
  alias_method :origin_initialize, :initialize
26
- def initialize(records, associations, preload_options = {})
27
- origin_initialize(records, associations, preload_options)
26
+ def initialize(records, associations, preload_scope = nil)
27
+ origin_initialize(records, associations, preload_scope)
28
28
  records = [records].flatten.compact.uniq
29
29
  return if records.empty?
30
30
  records.each do |record|
@@ -39,7 +39,7 @@ module Bullet
39
39
  alias_method :origin_find_with_associations, :find_with_associations
40
40
  def find_with_associations
41
41
  records = origin_find_with_associations
42
- associations = (@eager_load_values + @includes_values).uniq
42
+ associations = (eager_load_values + includes_values).uniq
43
43
  records.each do |record|
44
44
  Bullet::Detector::Association.add_object_associations(record, associations)
45
45
  Bullet::Detector::NPlusOneQuery.call_association(record, associations)
@@ -0,0 +1,94 @@
1
+ module Bullet
2
+ module ActiveRecord
3
+ def self.enable
4
+ require 'active_record'
5
+ ::ActiveRecord::Relation.class_eval do
6
+ alias_method :origin_to_a, :to_a
7
+ # if select a collection of objects, then these objects have possible to cause N+1 query.
8
+ # if select only one object, then the only one object has impossible to cause N+1 query.
9
+ def to_a
10
+ records = origin_to_a
11
+ if records.size > 1
12
+ Bullet::Detector::Association.add_possible_objects(records)
13
+ Bullet::Detector::Counter.add_possible_objects(records)
14
+ elsif records.size == 1
15
+ Bullet::Detector::Association.add_impossible_object(records.first)
16
+ Bullet::Detector::Counter.add_impossible_object(records.first)
17
+ end
18
+ records
19
+ end
20
+ end
21
+
22
+ ::ActiveRecord::Associations::Preloader.class_eval do
23
+ # include query for one to many associations.
24
+ # keep this eager loadings.
25
+ alias_method :origin_initialize, :initialize
26
+ def initialize(records, associations, preload_scope = nil)
27
+ origin_initialize(records, associations, preload_scope)
28
+ records = [records].flatten.compact.uniq
29
+ return if records.empty?
30
+ records.each do |record|
31
+ Bullet::Detector::Association.add_object_associations(record, associations)
32
+ end
33
+ Bullet::Detector::Association.add_eager_loadings(records, associations)
34
+ end
35
+ end
36
+
37
+ ::ActiveRecord::FinderMethods.class_eval do
38
+ # add includes in scope
39
+ alias_method :origin_find_with_associations, :find_with_associations
40
+ def find_with_associations
41
+ records = origin_find_with_associations
42
+ associations = (eager_load_values + includes_values).uniq
43
+ records.each do |record|
44
+ Bullet::Detector::Association.add_object_associations(record, associations)
45
+ Bullet::Detector::NPlusOneQuery.call_association(record, associations)
46
+ end
47
+ Bullet::Detector::Association.add_eager_loadings(records, associations)
48
+ records
49
+ end
50
+ end
51
+
52
+ ::ActiveRecord::Associations::JoinDependency.class_eval do
53
+ alias_method :origin_construct_association, :construct_association
54
+ # call join associations
55
+ def construct_association(record, join, row)
56
+ associations = join.reflection.name
57
+ Bullet::Detector::Association.add_object_associations(record, associations)
58
+ Bullet::Detector::NPlusOneQuery.call_association(record, associations)
59
+ origin_construct_association(record, join, row)
60
+ end
61
+ end
62
+
63
+ ::ActiveRecord::Associations::CollectionAssociation.class_eval do
64
+ # call one to many associations
65
+ alias_method :origin_load_target, :load_target
66
+ def load_target
67
+ Bullet::Detector::NPlusOneQuery.call_association(@owner, @reflection.name)
68
+ origin_load_target
69
+ end
70
+ end
71
+
72
+ ::ActiveRecord::Associations::SingularAssociation.class_eval do
73
+ # call has_one and belongs_to associations
74
+ alias_method :origin_reader, :reader
75
+ def reader(force_reload = false)
76
+ result = origin_reader(force_reload)
77
+ Bullet::Detector::NPlusOneQuery.call_association(@owner, @reflection.name)
78
+ Bullet::Detector::Association.add_possible_objects(result)
79
+ result
80
+ end
81
+ end
82
+
83
+ ::ActiveRecord::Associations::HasManyAssociation.class_eval do
84
+ alias_method :origin_has_cached_counter?, :has_cached_counter?
85
+
86
+ def has_cached_counter?(reflection = reflection)
87
+ result = origin_has_cached_counter?(reflection)
88
+ Bullet::Detector::Counter.add_counter_cache(owner, reflection.name) unless result
89
+ result
90
+ end
91
+ end
92
+ end
93
+ end
94
+ end
@@ -24,8 +24,10 @@ module Bullet
24
24
  'active_record2'
25
25
  elsif active_record30?
26
26
  'active_record3'
27
- elsif active_record31? || active_record32? || active_record4?
27
+ elsif active_record31? || active_record32?
28
28
  'active_record3x'
29
+ elsif active_record4?
30
+ 'active_record4'
29
31
  end
30
32
  end
31
33
  end
@@ -1,4 +1,4 @@
1
1
  # encoding: utf-8
2
2
  module Bullet
3
- VERSION = "4.3.1"
3
+ VERSION = "4.4.0"
4
4
  end
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- if active_record3?
3
+ if active_record3? || active_record4?
4
4
  describe Bullet::Detector::Association, 'has_many' do
5
5
  before(:each) do
6
6
  Bullet.clear
@@ -66,7 +66,7 @@ if active_record3?
66
66
  it "should detect preload category => posts, but no post => comments" do
67
67
  Category.includes(:posts).each do |category|
68
68
  category.posts.each do |post|
69
- post.comments.collect(&:name)
69
+ post.comments.map(&:name)
70
70
  end
71
71
  end
72
72
  Bullet::Detector::UnusedEagerAssociation.check_unused_preload_associations
@@ -176,7 +176,7 @@ if active_record3?
176
176
  end
177
177
 
178
178
  it "should detect preload with post => commnets" do
179
- Post.first.comments.collect(&:name)
179
+ Post.first.comments.map(&:name)
180
180
  Bullet::Detector::UnusedEagerAssociation.check_unused_preload_associations
181
181
  Bullet::Detector::Association.should_not be_has_unused_preload_associations
182
182
 
@@ -199,7 +199,7 @@ if active_record3?
199
199
 
200
200
  context "scope for_category_name" do
201
201
  it "should detect preload with post => category" do
202
- Post.in_category_name('first').all.each do |post|
202
+ Post.in_category_name('first').each do |post|
203
203
  post.category.name
204
204
  end
205
205
  Bullet::Detector::UnusedEagerAssociation.check_unused_preload_associations
@@ -278,7 +278,7 @@ if active_record3?
278
278
  end
279
279
 
280
280
  it "should not detect preload with comment => post" do
281
- Comment.all.collect(&:name)
281
+ Comment.all.map(&:name)
282
282
  Bullet::Detector::UnusedEagerAssociation.check_unused_preload_associations
283
283
  Bullet::Detector::Association.should_not be_has_unused_preload_associations
284
284
 
@@ -415,7 +415,7 @@ if active_record3?
415
415
  end
416
416
 
417
417
  it "should detect no unused preload associations" do
418
- Student.all.collect(&:name)
418
+ Student.all.map(&:name)
419
419
  Bullet::Detector::UnusedEagerAssociation.check_unused_preload_associations
420
420
  Bullet::Detector::Association.should_not be_has_unused_preload_associations
421
421
 
@@ -456,7 +456,7 @@ if active_record3?
456
456
  end
457
457
 
458
458
  it "should not detect preload associations" do
459
- Firm.all.collect(&:name)
459
+ Firm.all.map(&:name)
460
460
  Bullet::Detector::UnusedEagerAssociation.check_unused_preload_associations
461
461
  Bullet::Detector::Association.should_not be_has_unused_preload_associations
462
462
 
@@ -464,7 +464,7 @@ if active_record3?
464
464
  end
465
465
 
466
466
  it "should detect unused preload associations" do
467
- Firm.includes(:clients).collect(&:name)
467
+ Firm.includes(:clients).map(&:name)
468
468
  Bullet::Detector::UnusedEagerAssociation.check_unused_preload_associations
469
469
  Bullet::Detector::Association.should be_unused_preload_associations_for(Firm, :clients)
470
470
 
@@ -495,7 +495,7 @@ if active_record3?
495
495
  end
496
496
 
497
497
  it "should detect preload association" do
498
- Company.find(:all, :include => :address).each do |company|
498
+ Company.includes(:address).each do |company|
499
499
  company.address.name
500
500
  end
501
501
  Bullet::Detector::UnusedEagerAssociation.check_unused_preload_associations
@@ -505,7 +505,7 @@ if active_record3?
505
505
  end
506
506
 
507
507
  it "should not detect preload association" do
508
- Company.all.collect(&:name)
508
+ Company.all.map(&:name)
509
509
  Bullet::Detector::UnusedEagerAssociation.check_unused_preload_associations
510
510
  Bullet::Detector::Association.should_not be_has_unused_preload_associations
511
511
 
@@ -513,7 +513,7 @@ if active_record3?
513
513
  end
514
514
 
515
515
  it "should detect unused preload association" do
516
- Company.find(:all, :include => :address).collect(&:name)
516
+ Company.includes(:address).map(&:name)
517
517
  Bullet::Detector::UnusedEagerAssociation.check_unused_preload_associations
518
518
  Bullet::Detector::Association.should be_unused_preload_associations_for(Company, :address)
519
519
 
@@ -564,7 +564,7 @@ if active_record3?
564
564
  end
565
565
 
566
566
  it "should detect preload associations" do
567
- Page.find(:all, :include => :author).each do |page|
567
+ Page.includes(:author).each do |page|
568
568
  page.author.name
569
569
  end
570
570
  Bullet::Detector::UnusedEagerAssociation.check_unused_preload_associations
@@ -574,7 +574,7 @@ if active_record3?
574
574
  end
575
575
 
576
576
  it "should detect unused preload associations" do
577
- Page.find(:all, :include => :author).collect(&:name)
577
+ Page.includes(:author).map(&:name)
578
578
  Bullet::Detector::UnusedEagerAssociation.check_unused_preload_associations
579
579
  Bullet::Detector::Association.should be_unused_preload_associations_for(Page, :author)
580
580
 
@@ -582,7 +582,7 @@ if active_record3?
582
582
  end
583
583
 
584
584
  it "should not detect preload associations" do
585
- Page.all.collect(&:name)
585
+ Page.all.map(&:name)
586
586
  Bullet::Detector::UnusedEagerAssociation.check_unused_preload_associations
587
587
  Bullet::Detector::Association.should_not be_has_unused_preload_associations
588
588
 
@@ -1,6 +1,6 @@
1
1
  require 'spec_helper'
2
2
 
3
- if active_record3?
3
+ if active_record3? || active_record4?
4
4
  describe Bullet::Detector::Counter do
5
5
  before(:each) do
6
6
  Bullet.start_request
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: 4.3.1
4
+ version: 4.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Richard Huang
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-03-01 00:00:00.000000000 Z
11
+ date: 2013-03-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: uniform_notifier
@@ -54,6 +54,7 @@ files:
54
54
  - lib/bullet/active_record2.rb
55
55
  - lib/bullet/active_record3.rb
56
56
  - lib/bullet/active_record3x.rb
57
+ - lib/bullet/active_record4.rb
57
58
  - lib/bullet/dependency.rb
58
59
  - lib/bullet/detector.rb
59
60
  - lib/bullet/detector/association.rb
@@ -157,7 +158,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
157
158
  version: 1.3.6
158
159
  requirements: []
159
160
  rubyforge_project:
160
- rubygems_version: 2.0.0
161
+ rubygems_version: 2.0.2
161
162
  signing_key:
162
163
  specification_version: 4
163
164
  summary: A rails plugin to kill N+1 queries and unused eager loading.