bullet 4.0.0 → 4.1.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.
- data/.travis.yml +2 -0
- data/Gemfile +1 -2
- data/Gemfile.lock +8 -11
- data/Gemfile.rails-2.3.14.lock +1 -1
- data/Gemfile.rails-3.0.12.lock +1 -1
- data/Gemfile.rails-3.1.4 +1 -1
- data/Gemfile.rails-3.1.4.lock +4 -4
- data/lib/bullet.rb +9 -1
- data/lib/bullet/{mongoid.rb → mongoid24.rb} +11 -13
- data/lib/bullet/mongoid3.rb +53 -0
- data/lib/bullet/version.rb +1 -1
- data/spec/integration/mongoid/association_spec.rb +175 -198
- data/spec/support/mongo_seed.rb +10 -2
- data/test.sh +4 -0
- metadata +9 -7
data/.travis.yml
CHANGED
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
bullet (4.
|
4
|
+
bullet (4.1.0)
|
5
5
|
uniform_notifier (~> 1.0.0)
|
6
6
|
|
7
7
|
GEM
|
@@ -38,9 +38,6 @@ GEM
|
|
38
38
|
i18n (~> 0.6)
|
39
39
|
multi_json (~> 1.0)
|
40
40
|
arel (3.0.2)
|
41
|
-
bson (1.6.2)
|
42
|
-
bson_ext (1.6.2)
|
43
|
-
bson (~> 1.6.2)
|
44
41
|
builder (3.0.0)
|
45
42
|
diff-lcs (1.1.3)
|
46
43
|
erubis (2.7.0)
|
@@ -59,14 +56,15 @@ GEM
|
|
59
56
|
mime-types (~> 1.16)
|
60
57
|
treetop (~> 1.4.8)
|
61
58
|
mime-types (1.18)
|
62
|
-
|
63
|
-
bson (~> 1.6.2)
|
64
|
-
mongoid (2.4.9)
|
59
|
+
mongoid (3.0.0.rc)
|
65
60
|
activemodel (~> 3.1)
|
66
|
-
|
61
|
+
moped (~> 1.0.0.rc)
|
62
|
+
origin (~> 1.0.0.rc)
|
67
63
|
tzinfo (~> 0.3.22)
|
68
|
-
|
64
|
+
moped (1.0.0.rc)
|
65
|
+
multi_json (1.3.6)
|
69
66
|
mysql (2.8.1)
|
67
|
+
origin (1.0.0.rc)
|
70
68
|
perftools.rb (2.0.0)
|
71
69
|
polyglot (0.3.3)
|
72
70
|
rack (1.4.1)
|
@@ -120,11 +118,10 @@ PLATFORMS
|
|
120
118
|
|
121
119
|
DEPENDENCIES
|
122
120
|
activerecord-import
|
123
|
-
bson_ext
|
124
121
|
bullet!
|
125
122
|
guard
|
126
123
|
guard-rspec
|
127
|
-
mongoid
|
124
|
+
mongoid (= 3.0.0.rc)
|
128
125
|
mysql
|
129
126
|
perftools.rb
|
130
127
|
rails (= 3.2.3)
|
data/Gemfile.rails-2.3.14.lock
CHANGED
data/Gemfile.rails-3.0.12.lock
CHANGED
data/Gemfile.rails-3.1.4
CHANGED
data/Gemfile.rails-3.1.4.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
bullet (
|
4
|
+
bullet (4.1.0)
|
5
5
|
uniform_notifier (~> 1.0.0)
|
6
6
|
|
7
7
|
GEM
|
@@ -61,11 +61,11 @@ GEM
|
|
61
61
|
mime-types (1.18)
|
62
62
|
mongo (1.6.2)
|
63
63
|
bson (~> 1.6.2)
|
64
|
-
mongoid (2.4.
|
64
|
+
mongoid (2.4.10)
|
65
65
|
activemodel (~> 3.1)
|
66
66
|
mongo (~> 1.3)
|
67
67
|
tzinfo (~> 0.3.22)
|
68
|
-
multi_json (1.3.
|
68
|
+
multi_json (1.3.6)
|
69
69
|
mysql (2.8.1)
|
70
70
|
perftools.rb (2.0.0)
|
71
71
|
polyglot (0.3.3)
|
@@ -126,7 +126,7 @@ DEPENDENCIES
|
|
126
126
|
bullet!
|
127
127
|
guard
|
128
128
|
guard-rspec
|
129
|
-
mongoid
|
129
|
+
mongoid (= 2.4.10)
|
130
130
|
mysql
|
131
131
|
perftools.rb
|
132
132
|
rails (= 3.1.4)
|
data/lib/bullet.rb
CHANGED
@@ -12,7 +12,15 @@ module Bullet
|
|
12
12
|
autoload :ActiveRecord, 'bullet/active_record2'
|
13
13
|
autoload :ActionController, 'bullet/action_controller2'
|
14
14
|
end
|
15
|
-
|
15
|
+
begin
|
16
|
+
require 'mongoid'
|
17
|
+
if Mongoid::VERSION =~ /\A2\.4/
|
18
|
+
autoload :Mongoid, 'bullet/mongoid24'
|
19
|
+
elsif Mongoid::VERSION =~ /\A3/
|
20
|
+
autoload :Mongoid, 'bullet/mongoid3'
|
21
|
+
end
|
22
|
+
rescue LoadError
|
23
|
+
end
|
16
24
|
autoload :Rack, 'bullet/rack'
|
17
25
|
autoload :BulletLogger, 'bullet/logger'
|
18
26
|
autoload :Notification, 'bullet/notification'
|
@@ -2,10 +2,12 @@ module Bullet
|
|
2
2
|
module Mongoid
|
3
3
|
def self.enable
|
4
4
|
require 'mongoid'
|
5
|
+
|
5
6
|
::Mongoid::Contexts::Mongo.class_eval do
|
6
7
|
alias_method :origin_first, :first
|
7
8
|
alias_method :origin_last, :last
|
8
9
|
alias_method :origin_iterate, :iterate
|
10
|
+
alias_method :origin_eager_load, :eager_load
|
9
11
|
|
10
12
|
def first
|
11
13
|
result = origin_first
|
@@ -28,19 +30,6 @@ module Bullet
|
|
28
30
|
end
|
29
31
|
origin_iterate(&block)
|
30
32
|
end
|
31
|
-
end
|
32
|
-
|
33
|
-
::Mongoid::Relations::Accessors.class_eval do
|
34
|
-
alias_method :origin_set_relation, :set_relation
|
35
|
-
|
36
|
-
def set_relation(name, relation)
|
37
|
-
Bullet::Detector::NPlusOneQuery.call_association(self, name)
|
38
|
-
origin_set_relation(name, relation)
|
39
|
-
end
|
40
|
-
end
|
41
|
-
|
42
|
-
::Mongoid::Contexts::Mongo.class_eval do
|
43
|
-
alias_method :origin_eager_load, :eager_load
|
44
33
|
|
45
34
|
def eager_load(docs)
|
46
35
|
associations = criteria.inclusions.map(&:name)
|
@@ -51,6 +40,15 @@ module Bullet
|
|
51
40
|
origin_eager_load(docs)
|
52
41
|
end
|
53
42
|
end
|
43
|
+
|
44
|
+
::Mongoid::Relations::Accessors.class_eval do
|
45
|
+
alias_method :origin_set_relation, :set_relation
|
46
|
+
|
47
|
+
def set_relation(name, relation)
|
48
|
+
Bullet::Detector::NPlusOneQuery.call_association(self, name)
|
49
|
+
origin_set_relation(name, relation)
|
50
|
+
end
|
51
|
+
end
|
54
52
|
end
|
55
53
|
end
|
56
54
|
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
module Bullet
|
2
|
+
module Mongoid
|
3
|
+
def self.enable
|
4
|
+
require 'mongoid'
|
5
|
+
::Mongoid::Contextual::Mongo.class_eval do
|
6
|
+
alias_method :origin_first, :first
|
7
|
+
alias_method :origin_last, :last
|
8
|
+
alias_method :origin_each, :each
|
9
|
+
alias_method :origin_eager_load, :eager_load
|
10
|
+
|
11
|
+
def first
|
12
|
+
result = origin_first
|
13
|
+
Bullet::Detector::Association.add_impossible_object(result)
|
14
|
+
result
|
15
|
+
end
|
16
|
+
|
17
|
+
def last
|
18
|
+
result = origin_last
|
19
|
+
Bullet::Detector::Association.add_impossible_object(result)
|
20
|
+
result
|
21
|
+
end
|
22
|
+
|
23
|
+
def each(&block)
|
24
|
+
records = query.map{ |doc| ::Mongoid::Factory.from_db(klass, doc) }
|
25
|
+
if records.length > 1
|
26
|
+
Bullet::Detector::Association.add_possible_objects(records)
|
27
|
+
elsif records.size == 1
|
28
|
+
Bullet::Detector::Association.add_impossible_object(records.first)
|
29
|
+
end
|
30
|
+
origin_each(&block)
|
31
|
+
end
|
32
|
+
|
33
|
+
def eager_load(docs)
|
34
|
+
associations = criteria.inclusions.map(&:name)
|
35
|
+
docs.each do |doc|
|
36
|
+
Bullet::Detector::Association.add_object_associations(doc, associations)
|
37
|
+
end
|
38
|
+
Bullet::Detector::Association.add_eager_loadings(docs, associations)
|
39
|
+
origin_eager_load(docs)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
::Mongoid::Relations::Accessors.class_eval do
|
44
|
+
alias_method :origin_set_relation, :set_relation
|
45
|
+
|
46
|
+
def set_relation(name, relation)
|
47
|
+
Bullet::Detector::NPlusOneQuery.call_association(self, name)
|
48
|
+
origin_set_relation(name, relation)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
data/lib/bullet/version.rb
CHANGED
@@ -1,275 +1,252 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
1
|
begin
|
4
2
|
require 'mongoid'
|
5
|
-
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
describe Bullet::Detector::Association do
|
6
6
|
before(:each) do
|
7
7
|
Bullet.clear
|
8
8
|
Bullet.start_request
|
9
9
|
end
|
10
10
|
after(:each) do
|
11
11
|
Bullet.end_request
|
12
|
+
Mongoid::IdentityMap.clear
|
12
13
|
end
|
13
14
|
|
14
|
-
context
|
15
|
-
|
16
|
-
|
17
|
-
|
15
|
+
context 'has_many' do
|
16
|
+
context "posts => comments" do
|
17
|
+
it "should detect non preload posts => comments" do
|
18
|
+
Mongoid::Post.all.each do |post|
|
19
|
+
post.comments.map(&:name)
|
20
|
+
end
|
21
|
+
Bullet::Detector::UnusedEagerAssociation.check_unused_preload_associations
|
22
|
+
Bullet::Detector::Association.should_not be_has_unused_preload_associations
|
23
|
+
|
24
|
+
Bullet::Detector::Association.should be_detecting_unpreloaded_association_for(Mongoid::Post, :comments)
|
18
25
|
end
|
19
|
-
Bullet::Detector::UnusedEagerAssociation.check_unused_preload_associations
|
20
|
-
Bullet::Detector::Association.should_not be_has_unused_preload_associations
|
21
26
|
|
22
|
-
|
23
|
-
|
27
|
+
it "should detect preload post => comments" do
|
28
|
+
Mongoid::Post.includes(:comments).each do |post|
|
29
|
+
post.comments.map(&:name)
|
30
|
+
end
|
31
|
+
Bullet::Detector::UnusedEagerAssociation.check_unused_preload_associations
|
32
|
+
Bullet::Detector::Association.should_not be_has_unused_preload_associations
|
24
33
|
|
25
|
-
|
26
|
-
Mongoid::Post.includes(:comments).each do |post|
|
27
|
-
post.comments.map(&:name)
|
34
|
+
Bullet::Detector::Association.should be_completely_preloading_associations
|
28
35
|
end
|
29
|
-
Bullet::Detector::UnusedEagerAssociation.check_unused_preload_associations
|
30
|
-
Bullet::Detector::Association.should_not be_has_unused_preload_associations
|
31
36
|
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
Mongoid::Post.includes(:comments).map(&:name)
|
37
|
-
Bullet::Detector::UnusedEagerAssociation.check_unused_preload_associations
|
38
|
-
Bullet::Detector::Association.should be_unused_preload_associations_for(Mongoid::Post, :comments)
|
37
|
+
it "should detect unused preload post => comments" do
|
38
|
+
Mongoid::Post.includes(:comments).map(&:name)
|
39
|
+
Bullet::Detector::UnusedEagerAssociation.check_unused_preload_associations
|
40
|
+
Bullet::Detector::Association.should be_unused_preload_associations_for(Mongoid::Post, :comments)
|
39
41
|
|
40
|
-
|
41
|
-
|
42
|
+
Bullet::Detector::Association.should be_completely_preloading_associations
|
43
|
+
end
|
42
44
|
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
45
|
+
it "should not detect unused preload post => comments" do
|
46
|
+
Mongoid::Post.all.map(&:name)
|
47
|
+
Bullet::Detector::UnusedEagerAssociation.check_unused_preload_associations
|
48
|
+
Bullet::Detector::Association.should_not be_has_unused_preload_associations
|
47
49
|
|
48
|
-
|
50
|
+
Bullet::Detector::Association.should be_completely_preloading_associations
|
51
|
+
end
|
49
52
|
end
|
50
|
-
end
|
51
53
|
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
54
|
+
context "category => posts, category => entries" do
|
55
|
+
it "should detect non preload with category => [posts, entries]" do
|
56
|
+
Mongoid::Category.all.each do |category|
|
57
|
+
category.posts.map(&:name)
|
58
|
+
category.entries.map(&:name)
|
59
|
+
end
|
60
|
+
Bullet::Detector::UnusedEagerAssociation.check_unused_preload_associations
|
61
|
+
Bullet::Detector::Association.should_not be_has_unused_preload_associations
|
62
|
+
|
63
|
+
Bullet::Detector::Association.should be_detecting_unpreloaded_association_for(Mongoid::Category, :posts)
|
64
|
+
Bullet::Detector::Association.should be_detecting_unpreloaded_association_for(Mongoid::Category, :entries)
|
57
65
|
end
|
58
|
-
Bullet::Detector::UnusedEagerAssociation.check_unused_preload_associations
|
59
|
-
Bullet::Detector::Association.should_not be_has_unused_preload_associations
|
60
66
|
|
61
|
-
|
62
|
-
|
63
|
-
|
67
|
+
it "should detect preload with category => posts, but not with category => entries" do
|
68
|
+
Mongoid::Category.includes(:posts).each do |category|
|
69
|
+
category.posts.map(&:name)
|
70
|
+
category.entries.map(&:name)
|
71
|
+
end
|
72
|
+
Bullet::Detector::UnusedEagerAssociation.check_unused_preload_associations
|
73
|
+
Bullet::Detector::Association.should_not be_has_unused_preload_associations
|
64
74
|
|
65
|
-
|
66
|
-
|
67
|
-
category.posts.collect(&:name)
|
68
|
-
category.entries.collect(&:name)
|
75
|
+
Bullet::Detector::Association.should_not be_detecting_unpreloaded_association_for(Mongoid::Category, :posts)
|
76
|
+
Bullet::Detector::Association.should be_detecting_unpreloaded_association_for(Mongoid::Category, :entries)
|
69
77
|
end
|
70
|
-
Bullet::Detector::UnusedEagerAssociation.check_unused_preload_associations
|
71
|
-
Bullet::Detector::Association.should_not be_has_unused_preload_associations
|
72
78
|
|
73
|
-
|
74
|
-
|
75
|
-
|
79
|
+
it "should detect preload with category => [posts, entries]" do
|
80
|
+
Mongoid::Category.includes(:posts, :entries).each do |category|
|
81
|
+
category.posts.map(&:name)
|
82
|
+
category.entries.map(&:name)
|
83
|
+
end
|
84
|
+
Bullet::Detector::UnusedEagerAssociation.check_unused_preload_associations
|
85
|
+
Bullet::Detector::Association.should_not be_has_unused_preload_associations
|
76
86
|
|
77
|
-
|
78
|
-
Mongoid::Category.includes([:posts, :entries]).each do |category|
|
79
|
-
category.posts.map(&:name)
|
80
|
-
category.entries.map(&:name)
|
87
|
+
Bullet::Detector::Association.should be_completely_preloading_associations
|
81
88
|
end
|
82
|
-
Bullet::Detector::UnusedEagerAssociation.check_unused_preload_associations
|
83
|
-
Bullet::Detector::Association.should_not be_has_unused_preload_associations
|
84
89
|
|
85
|
-
|
86
|
-
|
90
|
+
it "should detect unused preload with category => [posts, entries]" do
|
91
|
+
Mongoid::Category.includes(:posts, :entries).map(&:name)
|
92
|
+
Bullet::Detector::UnusedEagerAssociation.check_unused_preload_associations
|
93
|
+
Bullet::Detector::Association.should be_unused_preload_associations_for(Mongoid::Category, :posts)
|
94
|
+
Bullet::Detector::Association.should be_unused_preload_associations_for(Mongoid::Category, :entries)
|
87
95
|
|
88
|
-
|
89
|
-
|
90
|
-
Bullet::Detector::UnusedEagerAssociation.check_unused_preload_associations
|
91
|
-
Bullet::Detector::Association.should be_unused_preload_associations_for(Mongoid::Category, :posts)
|
92
|
-
Bullet::Detector::Association.should be_unused_preload_associations_for(Mongoid::Category, :entries)
|
96
|
+
Bullet::Detector::Association.should be_completely_preloading_associations
|
97
|
+
end
|
93
98
|
|
94
|
-
|
95
|
-
|
99
|
+
it "should detect unused preload with category => entries, but not with category => posts" do
|
100
|
+
Mongoid::Category.includes(:posts, :entries).each do |category|
|
101
|
+
category.posts.map(&:name)
|
102
|
+
end
|
103
|
+
Bullet::Detector::UnusedEagerAssociation.check_unused_preload_associations
|
104
|
+
Bullet::Detector::Association.should_not be_unused_preload_associations_for(Mongoid::Category, :posts)
|
105
|
+
Bullet::Detector::Association.should be_unused_preload_associations_for(Mongoid::Category, :entries)
|
96
106
|
|
97
|
-
|
98
|
-
Mongoid::Category.includes([:posts, :entries]).each do |category|
|
99
|
-
category.posts.map(&:name)
|
107
|
+
Bullet::Detector::Association.should be_completely_preloading_associations
|
100
108
|
end
|
101
|
-
Bullet::Detector::UnusedEagerAssociation.check_unused_preload_associations
|
102
|
-
Bullet::Detector::Association.should_not be_unused_preload_associations_for(Mongoid::Category, :posts)
|
103
|
-
Bullet::Detector::Association.should be_unused_preload_associations_for(Mongoid::Category, :entries)
|
104
|
-
|
105
|
-
Bullet::Detector::Association.should be_completely_preloading_associations
|
106
109
|
end
|
107
|
-
end
|
108
110
|
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
111
|
+
context "post => comment" do
|
112
|
+
it "should detect unused preload with post => comments" do
|
113
|
+
Mongoid::Post.includes(:comments).each do |post|
|
114
|
+
post.comments.first.name
|
115
|
+
end
|
116
|
+
Bullet::Detector::UnusedEagerAssociation.check_unused_preload_associations
|
117
|
+
Bullet::Detector::Association.should_not be_unused_preload_associations_for(Mongoid::Post, :comments)
|
116
118
|
|
117
|
-
|
118
|
-
|
119
|
+
Bullet::Detector::Association.should be_completely_preloading_associations
|
120
|
+
end
|
119
121
|
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
122
|
+
it "should detect preload with post => commnets" do
|
123
|
+
Mongoid::Post.first.comments.map(&:name)
|
124
|
+
Bullet::Detector::UnusedEagerAssociation.check_unused_preload_associations
|
125
|
+
Bullet::Detector::Association.should_not be_has_unused_preload_associations
|
124
126
|
|
125
|
-
|
127
|
+
Bullet::Detector::Association.should be_completely_preloading_associations
|
128
|
+
end
|
126
129
|
end
|
127
|
-
end
|
128
130
|
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
134
|
-
|
135
|
-
|
131
|
+
context "scope preload_comments" do
|
132
|
+
it "should detect preload post => comments with scope" do
|
133
|
+
Mongoid::Post.preload_comments.each do |post|
|
134
|
+
post.comments.map(&:name)
|
135
|
+
end
|
136
|
+
Bullet::Detector::UnusedEagerAssociation.check_unused_preload_associations
|
137
|
+
Bullet::Detector::Association.should_not be_has_unused_preload_associations
|
136
138
|
|
137
|
-
|
138
|
-
|
139
|
+
Bullet::Detector::Association.should be_completely_preloading_associations
|
140
|
+
end
|
139
141
|
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
142
|
+
it "should detect unused preload with scope" do
|
143
|
+
Mongoid::Post.preload_comments.map(&:name)
|
144
|
+
Bullet::Detector::UnusedEagerAssociation.check_unused_preload_associations
|
145
|
+
Bullet::Detector::Association.should be_unused_preload_associations_for(Mongoid::Post, :comments)
|
144
146
|
|
145
|
-
|
147
|
+
Bullet::Detector::Association.should be_completely_preloading_associations
|
148
|
+
end
|
146
149
|
end
|
147
150
|
end
|
148
|
-
end
|
149
151
|
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
152
|
+
context 'belongs_to' do
|
153
|
+
context "comment => post" do
|
154
|
+
it "should detect non preload with comment => post" do
|
155
|
+
Mongoid::Comment.all.each do |comment|
|
156
|
+
comment.post.name
|
157
|
+
end
|
158
|
+
Bullet::Detector::UnusedEagerAssociation.check_unused_preload_associations
|
159
|
+
Bullet::Detector::Association.should_not be_has_unused_preload_associations
|
155
160
|
|
156
|
-
|
157
|
-
Bullet.end_request
|
158
|
-
end
|
159
|
-
|
160
|
-
context "comment => post" do
|
161
|
-
it "should detect non preload with comment => post" do
|
162
|
-
Mongoid::Comment.all.each do |comment|
|
163
|
-
comment.post.name
|
161
|
+
Bullet::Detector::Association.should be_detecting_unpreloaded_association_for(Mongoid::Comment, :post)
|
164
162
|
end
|
165
|
-
Bullet::Detector::UnusedEagerAssociation.check_unused_preload_associations
|
166
|
-
Bullet::Detector::Association.should_not be_has_unused_preload_associations
|
167
163
|
|
168
|
-
|
169
|
-
|
164
|
+
it "should detect preload with one comment => post" do
|
165
|
+
Mongoid::Comment.first.post.name
|
166
|
+
Bullet::Detector::UnusedEagerAssociation.check_unused_preload_associations
|
167
|
+
Bullet::Detector::Association.should_not be_has_unused_preload_associations
|
170
168
|
|
171
|
-
|
172
|
-
|
173
|
-
Bullet::Detector::UnusedEagerAssociation.check_unused_preload_associations
|
174
|
-
Bullet::Detector::Association.should_not be_has_unused_preload_associations
|
169
|
+
Bullet::Detector::Association.should be_completely_preloading_associations
|
170
|
+
end
|
175
171
|
|
176
|
-
|
177
|
-
|
172
|
+
it "should detect preload with comment => post" do
|
173
|
+
Mongoid::Comment.includes(:post).each do |comment|
|
174
|
+
comment.post.name
|
175
|
+
end
|
176
|
+
Bullet::Detector::UnusedEagerAssociation.check_unused_preload_associations
|
177
|
+
Bullet::Detector::Association.should_not be_has_unused_preload_associations
|
178
178
|
|
179
|
-
|
180
|
-
Mongoid::Comment.includes(:post).each do |comment|
|
181
|
-
comment.post.name
|
179
|
+
Bullet::Detector::Association.should be_completely_preloading_associations
|
182
180
|
end
|
183
|
-
Bullet::Detector::UnusedEagerAssociation.check_unused_preload_associations
|
184
|
-
Bullet::Detector::Association.should_not be_has_unused_preload_associations
|
185
181
|
|
186
|
-
|
187
|
-
|
182
|
+
it "should not detect preload with comment => post" do
|
183
|
+
Mongoid::Comment.all.map(&:name)
|
184
|
+
Bullet::Detector::UnusedEagerAssociation.check_unused_preload_associations
|
185
|
+
Bullet::Detector::Association.should_not be_has_unused_preload_associations
|
188
186
|
|
189
|
-
|
190
|
-
|
191
|
-
Bullet::Detector::UnusedEagerAssociation.check_unused_preload_associations
|
192
|
-
Bullet::Detector::Association.should_not be_has_unused_preload_associations
|
193
|
-
|
194
|
-
Bullet::Detector::Association.should be_completely_preloading_associations
|
195
|
-
end
|
187
|
+
Bullet::Detector::Association.should be_completely_preloading_associations
|
188
|
+
end
|
196
189
|
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
190
|
+
it "should detect unused preload with comments => post" do
|
191
|
+
Mongoid::Comment.includes(:post).map(&:name)
|
192
|
+
Bullet::Detector::UnusedEagerAssociation.check_unused_preload_associations
|
193
|
+
Bullet::Detector::Association.should be_unused_preload_associations_for(Mongoid::Comment, :post)
|
201
194
|
|
202
|
-
|
195
|
+
Bullet::Detector::Association.should be_completely_preloading_associations
|
196
|
+
end
|
203
197
|
end
|
204
198
|
end
|
205
|
-
end
|
206
199
|
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
200
|
+
context "has_one" do
|
201
|
+
context "company => address" do
|
202
|
+
it "should detect non preload association" do
|
203
|
+
Mongoid::Company.all.each do |company|
|
204
|
+
company.address.name
|
205
|
+
end
|
206
|
+
Bullet::Detector::UnusedEagerAssociation.check_unused_preload_associations
|
207
|
+
Bullet::Detector::Association.should_not be_has_unused_preload_associations
|
212
208
|
|
213
|
-
|
214
|
-
|
215
|
-
|
209
|
+
Bullet::Detector::Association.should be_detecting_unpreloaded_association_for(Mongoid::Company, :address)
|
210
|
+
end
|
211
|
+
|
212
|
+
it "should detect preload association" do
|
213
|
+
Mongoid::Company.includes(:address).each do |company|
|
214
|
+
company.address.name
|
215
|
+
end
|
216
|
+
Bullet::Detector::UnusedEagerAssociation.check_unused_preload_associations
|
217
|
+
Bullet::Detector::Association.should_not be_has_unused_preload_associations
|
216
218
|
|
217
|
-
|
218
|
-
it "should detect non preload association" do
|
219
|
-
Mongoid::Company.all.each do |company|
|
220
|
-
company.address.name
|
219
|
+
Bullet::Detector::Association.should be_completely_preloading_associations
|
221
220
|
end
|
222
|
-
Bullet::Detector::UnusedEagerAssociation.check_unused_preload_associations
|
223
|
-
Bullet::Detector::Association.should_not be_has_unused_preload_associations
|
224
221
|
|
225
|
-
|
226
|
-
|
222
|
+
it "should not detect preload association" do
|
223
|
+
Mongoid::Company.all.map(&:name)
|
224
|
+
Bullet::Detector::UnusedEagerAssociation.check_unused_preload_associations
|
225
|
+
Bullet::Detector::Association.should_not be_has_unused_preload_associations
|
227
226
|
|
228
|
-
|
229
|
-
Mongoid::Company.includes(:address).each do |company|
|
230
|
-
company.address.name
|
227
|
+
Bullet::Detector::Association.should be_completely_preloading_associations
|
231
228
|
end
|
232
|
-
Bullet::Detector::UnusedEagerAssociation.check_unused_preload_associations
|
233
|
-
Bullet::Detector::Association.should_not be_has_unused_preload_associations
|
234
229
|
|
235
|
-
|
230
|
+
it "should detect unused preload association" do
|
231
|
+
criteria = Mongoid::Company.includes(:address)
|
232
|
+
criteria.map(&:name)
|
233
|
+
Bullet::Detector::UnusedEagerAssociation.check_unused_preload_associations
|
234
|
+
Bullet::Detector::Association.should be_unused_preload_associations_for(Mongoid::Company, :address)
|
235
|
+
|
236
|
+
Bullet::Detector::Association.should be_completely_preloading_associations
|
237
|
+
end
|
236
238
|
end
|
239
|
+
end
|
237
240
|
|
241
|
+
context "call one association that in possible objects" do
|
238
242
|
it "should not detect preload association" do
|
239
|
-
Mongoid::
|
243
|
+
Mongoid::Post.all
|
244
|
+
Mongoid::Post.first.comments.map(&:name)
|
240
245
|
Bullet::Detector::UnusedEagerAssociation.check_unused_preload_associations
|
241
246
|
Bullet::Detector::Association.should_not be_has_unused_preload_associations
|
242
247
|
|
243
248
|
Bullet::Detector::Association.should be_completely_preloading_associations
|
244
249
|
end
|
245
|
-
|
246
|
-
it "should detect unused preload association" do
|
247
|
-
Mongoid::Company.includes(:address).collect(&:name)
|
248
|
-
Bullet::Detector::UnusedEagerAssociation.check_unused_preload_associations
|
249
|
-
Bullet::Detector::Association.should be_unused_preload_associations_for(Mongoid::Company, :address)
|
250
|
-
|
251
|
-
Bullet::Detector::Association.should be_completely_preloading_associations
|
252
|
-
end
|
253
|
-
end
|
254
|
-
end
|
255
|
-
|
256
|
-
describe Bullet::Detector::Association, "call one association that in possible objects" do
|
257
|
-
before(:each) do
|
258
|
-
Bullet.clear
|
259
|
-
Bullet.start_request
|
260
|
-
end
|
261
|
-
|
262
|
-
after(:each) do
|
263
|
-
Bullet.end_request
|
264
|
-
end
|
265
|
-
|
266
|
-
it "should not detect preload association" do
|
267
|
-
Mongoid::Post.all
|
268
|
-
Mongoid::Post.first.comments.map(&:name)
|
269
|
-
Bullet::Detector::UnusedEagerAssociation.check_unused_preload_associations
|
270
|
-
Bullet::Detector::Association.should_not be_has_unused_preload_associations
|
271
|
-
|
272
|
-
Bullet::Detector::Association.should be_completely_preloading_associations
|
273
250
|
end
|
274
251
|
end
|
275
252
|
rescue LoadError
|
data/spec/support/mongo_seed.rb
CHANGED
@@ -29,11 +29,19 @@ module Support
|
|
29
29
|
end
|
30
30
|
|
31
31
|
def setup_db
|
32
|
-
Mongoid
|
32
|
+
if Mongoid::VERSION =~ /\A2\.4/
|
33
|
+
Mongoid.configure do |config|
|
34
|
+
config.master = Mongo::Connection.new.db("bullet")
|
35
|
+
end
|
36
|
+
elsif Mongoid::VERSION =~ /\A3/
|
37
|
+
Mongoid.configure do |config|
|
38
|
+
config.connect_to("bullet")
|
39
|
+
end
|
40
|
+
end
|
33
41
|
end
|
34
42
|
|
35
43
|
def teardown_db
|
36
|
-
Mongoid.
|
44
|
+
Mongoid.purge!
|
37
45
|
end
|
38
46
|
|
39
47
|
extend self
|
data/test.sh
ADDED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bullet
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 4.
|
4
|
+
version: 4.1.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-05-
|
12
|
+
date: 2012-05-30 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: uniform_notifier
|
16
|
-
requirement: &
|
16
|
+
requirement: &70161212330380 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,7 +21,7 @@ dependencies:
|
|
21
21
|
version: 1.0.0
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *70161212330380
|
25
25
|
description: A rails plugin to kill N+1 queries and unused eager loading.
|
26
26
|
email:
|
27
27
|
- flyerhzm@gmail.com
|
@@ -62,7 +62,8 @@ files:
|
|
62
62
|
- lib/bullet/detector/unused_eager_association.rb
|
63
63
|
- lib/bullet/ext/object.rb
|
64
64
|
- lib/bullet/ext/string.rb
|
65
|
-
- lib/bullet/
|
65
|
+
- lib/bullet/mongoid24.rb
|
66
|
+
- lib/bullet/mongoid3.rb
|
66
67
|
- lib/bullet/notification.rb
|
67
68
|
- lib/bullet/notification/base.rb
|
68
69
|
- lib/bullet/notification/counter_cache.rb
|
@@ -135,6 +136,7 @@ files:
|
|
135
136
|
- spec/support/sqlite_seed.rb
|
136
137
|
- tasks/bullet_tasks.rake
|
137
138
|
- test.result
|
139
|
+
- test.sh
|
138
140
|
homepage: http://github.com/flyerhzm/bullet
|
139
141
|
licenses: []
|
140
142
|
post_install_message:
|
@@ -149,7 +151,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
149
151
|
version: '0'
|
150
152
|
segments:
|
151
153
|
- 0
|
152
|
-
hash:
|
154
|
+
hash: 2670779275443337107
|
153
155
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
154
156
|
none: false
|
155
157
|
requirements:
|
@@ -158,7 +160,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
158
160
|
version: 1.3.6
|
159
161
|
requirements: []
|
160
162
|
rubyforge_project:
|
161
|
-
rubygems_version: 1.8.
|
163
|
+
rubygems_version: 1.8.17
|
162
164
|
signing_key:
|
163
165
|
specification_version: 3
|
164
166
|
summary: A rails plugin to kill N+1 queries and unused eager loading.
|