bullet 5.7.0 → 5.8.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.
Files changed (101) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +16 -1
  3. data/Gemfile.rails-5.2 +1 -1
  4. data/Guardfile +1 -1
  5. data/README.md +9 -4
  6. data/Rakefile +5 -5
  7. data/bullet.gemspec +11 -6
  8. data/lib/bullet/active_record4.rb +18 -14
  9. data/lib/bullet/active_record41.rb +16 -14
  10. data/lib/bullet/active_record42.rb +24 -22
  11. data/lib/bullet/active_record5.rb +78 -49
  12. data/lib/bullet/active_record52.rb +47 -40
  13. data/lib/bullet/dependency.rb +3 -1
  14. data/lib/bullet/detector/association.rb +16 -14
  15. data/lib/bullet/detector/base.rb +2 -0
  16. data/lib/bullet/detector/counter_cache.rb +10 -7
  17. data/lib/bullet/detector/n_plus_one_query.rb +17 -15
  18. data/lib/bullet/detector/unused_eager_loading.rb +26 -21
  19. data/lib/bullet/detector.rb +2 -0
  20. data/lib/bullet/ext/object.rb +6 -4
  21. data/lib/bullet/ext/string.rb +3 -1
  22. data/lib/bullet/mongoid4x.rb +7 -2
  23. data/lib/bullet/mongoid5x.rb +7 -2
  24. data/lib/bullet/mongoid6x.rb +11 -6
  25. data/lib/bullet/notification/base.rb +21 -15
  26. data/lib/bullet/notification/counter_cache.rb +2 -0
  27. data/lib/bullet/notification/n_plus_one_query.rb +6 -4
  28. data/lib/bullet/notification/unused_eager_loading.rb +6 -4
  29. data/lib/bullet/notification.rb +2 -0
  30. data/lib/bullet/notification_collector.rb +2 -1
  31. data/lib/bullet/rack.rb +19 -15
  32. data/lib/bullet/registry/association.rb +2 -0
  33. data/lib/bullet/registry/base.rb +2 -0
  34. data/lib/bullet/registry/object.rb +2 -0
  35. data/lib/bullet/registry.rb +2 -0
  36. data/lib/bullet/stack_trace_filter.rb +56 -19
  37. data/lib/bullet/version.rb +2 -1
  38. data/lib/bullet.rb +31 -29
  39. data/lib/generators/bullet/install_generator.rb +5 -3
  40. data/perf/benchmark.rb +9 -7
  41. data/rails/init.rb +2 -0
  42. data/spec/bullet/detector/association_spec.rb +2 -0
  43. data/spec/bullet/detector/base_spec.rb +2 -0
  44. data/spec/bullet/detector/counter_cache_spec.rb +2 -0
  45. data/spec/bullet/detector/n_plus_one_query_spec.rb +33 -8
  46. data/spec/bullet/detector/unused_eager_loading_spec.rb +2 -0
  47. data/spec/bullet/ext/object_spec.rb +3 -1
  48. data/spec/bullet/ext/string_spec.rb +2 -0
  49. data/spec/bullet/notification/base_spec.rb +8 -6
  50. data/spec/bullet/notification/counter_cache_spec.rb +3 -1
  51. data/spec/bullet/notification/n_plus_one_query_spec.rb +3 -1
  52. data/spec/bullet/notification/unused_eager_loading_spec.rb +3 -1
  53. data/spec/bullet/notification_collector_spec.rb +2 -0
  54. data/spec/bullet/rack_spec.rb +10 -9
  55. data/spec/bullet/registry/association_spec.rb +4 -2
  56. data/spec/bullet/registry/base_spec.rb +5 -3
  57. data/spec/bullet/registry/object_spec.rb +2 -0
  58. data/spec/bullet_spec.rb +9 -7
  59. data/spec/integration/active_record/association_spec.rb +79 -17
  60. data/spec/integration/counter_cache_spec.rb +4 -2
  61. data/spec/integration/mongoid/association_spec.rb +2 -0
  62. data/spec/models/address.rb +2 -0
  63. data/spec/models/author.rb +2 -0
  64. data/spec/models/base_user.rb +2 -0
  65. data/spec/models/category.rb +2 -0
  66. data/spec/models/city.rb +2 -0
  67. data/spec/models/client.rb +4 -0
  68. data/spec/models/comment.rb +2 -0
  69. data/spec/models/company.rb +2 -0
  70. data/spec/models/country.rb +2 -0
  71. data/spec/models/document.rb +2 -0
  72. data/spec/models/entry.rb +2 -0
  73. data/spec/models/firm.rb +3 -0
  74. data/spec/models/folder.rb +2 -0
  75. data/spec/models/group.rb +4 -0
  76. data/spec/models/mongoid/address.rb +3 -1
  77. data/spec/models/mongoid/category.rb +4 -2
  78. data/spec/models/mongoid/comment.rb +3 -1
  79. data/spec/models/mongoid/company.rb +3 -1
  80. data/spec/models/mongoid/entry.rb +3 -1
  81. data/spec/models/mongoid/post.rb +6 -4
  82. data/spec/models/mongoid/user.rb +2 -0
  83. data/spec/models/newspaper.rb +2 -0
  84. data/spec/models/page.rb +2 -0
  85. data/spec/models/person.rb +2 -0
  86. data/spec/models/pet.rb +2 -0
  87. data/spec/models/post.rb +17 -0
  88. data/spec/models/relationship.rb +2 -0
  89. data/spec/models/reply.rb +2 -0
  90. data/spec/models/student.rb +2 -0
  91. data/spec/models/submission.rb +2 -0
  92. data/spec/models/teacher.rb +2 -0
  93. data/spec/models/user.rb +2 -0
  94. data/spec/models/writer.rb +2 -0
  95. data/spec/spec_helper.rb +3 -1
  96. data/spec/support/bullet_ext.rb +2 -0
  97. data/spec/support/mongo_seed.rb +32 -30
  98. data/spec/support/rack_double.rb +9 -16
  99. data/spec/support/sqlite_seed.rb +84 -75
  100. data/tasks/bullet_tasks.rake +2 -0
  101. metadata +11 -7
@@ -1,100 +1,106 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Support
2
4
  module SqliteSeed
5
+ module_function
6
+
3
7
  def seed_db
4
- newspaper1 = Newspaper.create(:name => 'First Newspaper')
5
- newspaper2 = Newspaper.create(:name => 'Second Newspaper')
6
-
7
- writer1 = Writer.create(:name => 'first', :newspaper => newspaper1)
8
- writer2 = Writer.create(:name => 'second', :newspaper => newspaper2)
9
- user1 = BaseUser.create(:name => 'third', :newspaper => newspaper1)
10
- user2 = BaseUser.create(:name => 'fourth', :newspaper => newspaper2)
11
-
12
- category1 = Category.create(:name => 'first')
13
- category2 = Category.create(:name => 'second')
14
-
15
- post1 = category1.posts.create(:name => 'first', :writer => writer1)
16
- post1a = category1.posts.create(:name => 'like first', :writer => writer2, active: false)
17
- post2 = category2.posts.create(:name => 'second', :writer => writer2)
18
- post3 = category2.posts.create(:name => 'third', :writer => writer2)
19
-
20
- comment1 = post1.comments.create(:name => 'first', :author => writer1)
21
- comment2 = post1.comments.create(:name => 'first2', :author => writer1)
22
- comment3 = post1.comments.create(:name => 'first3', :author => writer1)
23
- comment4 = post1.comments.create(:name => 'second', :author => writer2)
24
- comment8 = post1a.comments.create(:name => 'like first 1', :author => writer1)
25
- comment9 = post1a.comments.create(:name => 'like first 2', :author => writer2)
26
- comment5 = post2.comments.create(:name => 'third', :author => user1)
27
- comment6 = post2.comments.create(:name => 'fourth', :author => user2)
28
- comment7 = post2.comments.create(:name => 'fourth', :author => writer1)
29
-
30
- entry1 = category1.entries.create(:name => 'first')
31
- entry2 = category1.entries.create(:name => 'second')
32
-
33
- student1 = Student.create(:name => 'first')
34
- student2 = Student.create(:name => 'second')
35
- teacher1 = Teacher.create(:name => 'first')
36
- teacher2 = Teacher.create(:name => 'second')
8
+ newspaper1 = Newspaper.create(name: 'First Newspaper')
9
+ newspaper2 = Newspaper.create(name: 'Second Newspaper')
10
+
11
+ writer1 = Writer.create(name: 'first', newspaper: newspaper1)
12
+ writer2 = Writer.create(name: 'second', newspaper: newspaper2)
13
+ user1 = BaseUser.create(name: 'third', newspaper: newspaper1)
14
+ user2 = BaseUser.create(name: 'fourth', newspaper: newspaper2)
15
+
16
+ category1 = Category.create(name: 'first')
17
+ category2 = Category.create(name: 'second')
18
+
19
+ post1 = category1.posts.create(name: 'first', writer: writer1)
20
+ post1a = category1.posts.create(name: 'like first', writer: writer2, active: false)
21
+ post2 = category2.posts.create(name: 'second', writer: writer2)
22
+ post3 = category2.posts.create(name: 'third', writer: writer2)
23
+
24
+ comment1 = post1.comments.create(name: 'first', author: writer1)
25
+ comment2 = post1.comments.create(name: 'first2', author: writer1)
26
+ comment3 = post1.comments.create(name: 'first3', author: writer1)
27
+ comment4 = post1.comments.create(name: 'second', author: writer2)
28
+ comment8 = post1a.comments.create(name: 'like first 1', author: writer1)
29
+ comment9 = post1a.comments.create(name: 'like first 2', author: writer2)
30
+ comment5 = post2.comments.create(name: 'third', author: user1)
31
+ comment6 = post2.comments.create(name: 'fourth', author: user2)
32
+ comment7 = post2.comments.create(name: 'fourth', author: writer1)
33
+
34
+ entry1 = category1.entries.create(name: 'first')
35
+ entry2 = category1.entries.create(name: 'second')
36
+
37
+ student1 = Student.create(name: 'first')
38
+ student2 = Student.create(name: 'second')
39
+ teacher1 = Teacher.create(name: 'first')
40
+ teacher2 = Teacher.create(name: 'second')
37
41
  student1.teachers = [teacher1, teacher2]
38
42
  student2.teachers = [teacher1, teacher2]
39
43
  teacher1.students << student1
40
44
  teacher2.students << student2
41
45
 
42
- firm1 = Firm.create(:name => 'first')
43
- firm2 = Firm.create(:name => 'second')
44
- client1 = Client.create(:name => 'first')
45
- client2 = Client.create(:name => 'second')
46
+ firm1 = Firm.create(name: 'first')
47
+ firm2 = Firm.create(name: 'second')
48
+ group1 = Group.create(name: 'first')
49
+ group2 = Group.create(name: 'second')
50
+ client1 = Client.create(name: 'first', group: group1)
51
+ client2 = Client.create(name: 'second', group: group2)
46
52
  firm1.clients = [client1, client2]
47
53
  firm2.clients = [client1, client2]
48
54
  client1.firms << firm1
49
55
  client2.firms << firm2
50
56
 
51
- company1 = Company.create(:name => 'first')
52
- company2 = Company.create(:name => 'second')
57
+ company1 = Company.create(name: 'first')
58
+ company2 = Company.create(name: 'second')
53
59
 
54
- Address.create(:name => 'first', :company => company1)
55
- Address.create(:name => 'second', :company => company2)
60
+ Address.create(name: 'first', company: company1)
61
+ Address.create(name: 'second', company: company2)
56
62
 
57
- country1 = Country.create(:name => 'first')
58
- country2 = Country.create(:name => 'second')
63
+ country1 = Country.create(name: 'first')
64
+ country2 = Country.create(name: 'second')
59
65
 
60
- country1.cities.create(:name => 'first')
61
- country1.cities.create(:name => 'second')
62
- country2.cities.create(:name => 'third')
63
- country2.cities.create(:name => 'fourth')
66
+ country1.cities.create(name: 'first')
67
+ country1.cities.create(name: 'second')
68
+ country2.cities.create(name: 'third')
69
+ country2.cities.create(name: 'fourth')
64
70
 
65
- person1 = Person.create(:name => 'first')
66
- person2 = Person.create(:name => 'second')
71
+ person1 = Person.create(name: 'first')
72
+ person2 = Person.create(name: 'second')
67
73
 
68
- person1.pets.create(:name => 'first')
69
- person1.pets.create(:name => 'second')
70
- person2.pets.create(:name => 'third')
71
- person2.pets.create(:name => 'fourth')
74
+ person1.pets.create(name: 'first')
75
+ person1.pets.create(name: 'second')
76
+ person2.pets.create(name: 'third')
77
+ person2.pets.create(name: 'fourth')
72
78
 
73
- author1 = Author.create(:name => 'author1')
74
- author2 = Author.create(:name => 'author2')
75
- folder1 = Folder.create(:name => 'folder1', :author_id => author1.id)
76
- folder2 = Folder.create(:name => 'folder2', :author_id => author2.id)
77
- page1 = Page.create(:name => 'page1', :parent_id => folder1.id, :author_id => author1.id)
78
- page2 = Page.create(:name => 'page2', :parent_id => folder1.id, :author_id => author1.id)
79
- page3 = Page.create(:name => 'page3', :parent_id => folder2.id, :author_id => author2.id)
80
- page4 = Page.create(:name => 'page4', :parent_id => folder2.id, :author_id => author2.id)
79
+ author1 = Author.create(name: 'author1')
80
+ author2 = Author.create(name: 'author2')
81
+ folder1 = Folder.create(name: 'folder1', author_id: author1.id)
82
+ folder2 = Folder.create(name: 'folder2', author_id: author2.id)
83
+ page1 = Page.create(name: 'page1', parent_id: folder1.id, author_id: author1.id)
84
+ page2 = Page.create(name: 'page2', parent_id: folder1.id, author_id: author1.id)
85
+ page3 = Page.create(name: 'page3', parent_id: folder2.id, author_id: author2.id)
86
+ page4 = Page.create(name: 'page4', parent_id: folder2.id, author_id: author2.id)
81
87
 
82
- user1 = User.create(:name => 'user1', :category => category1)
83
- user2 = User.create(:name => 'user2', :category => category1)
88
+ user1 = User.create(name: 'user1', category: category1)
89
+ user2 = User.create(name: 'user2', category: category1)
84
90
 
85
- submission1 = user1.create_submission(:name => 'submission1')
86
- submission2 = user2.create_submission(:name => 'submission2')
91
+ submission1 = user1.create_submission(name: 'submission1')
92
+ submission2 = user2.create_submission(name: 'submission2')
87
93
 
88
- submission1.replies.create(:name => 'reply1')
89
- submission1.replies.create(:name => 'reply2')
90
- submission2.replies.create(:name => 'reply3')
91
- submission2.replies.create(:name => 'reply4')
94
+ submission1.replies.create(name: 'reply1')
95
+ submission1.replies.create(name: 'reply2')
96
+ submission2.replies.create(name: 'reply3')
97
+ submission2.replies.create(name: 'reply4')
92
98
  end
93
99
 
94
100
  def setup_db
95
- ActiveRecord::Base.establish_connection(:adapter => 'sqlite3', :database => ':memory:')
101
+ ActiveRecord::Base.establish_connection(adapter: 'sqlite3', database: ':memory:')
96
102
 
97
- ActiveRecord::Schema.define(:version => 1) do
103
+ ActiveRecord::Schema.define(version: 1) do
98
104
  create_table :addresses do |t|
99
105
  t.column :name, :string
100
106
  t.column :company_id, :integer
@@ -121,6 +127,7 @@ module Support
121
127
 
122
128
  create_table :clients do |t|
123
129
  t.column :name, :string
130
+ t.column :group_id, :integer
124
131
  end
125
132
 
126
133
  create_table :comments do |t|
@@ -167,6 +174,10 @@ module Support
167
174
  t.column :name, :string
168
175
  end
169
176
 
177
+ create_table :groups do |t|
178
+ t.column :name, :string
179
+ end
180
+
170
181
  create_table :hotels do |t|
171
182
  t.column :name, :string
172
183
  t.column :location_id, :integer
@@ -194,7 +205,7 @@ module Support
194
205
  t.column :name, :string
195
206
  t.column :category_id, :integer
196
207
  t.column :writer_id, :integer
197
- t.column :active, :boolean, :default => true
208
+ t.column :active, :boolean, default: true
198
209
  end
199
210
 
200
211
  create_table :relationships do |t|
@@ -206,7 +217,7 @@ module Support
206
217
  t.column :name, :string
207
218
  end
208
219
 
209
- create_table :students_teachers, :id => false do |t|
220
+ create_table :students_teachers, id: false do |t|
210
221
  t.column :student_id, :integer
211
222
  t.column :teacher_id, :integer
212
223
  end
@@ -231,7 +242,5 @@ module Support
231
242
  end
232
243
  end
233
244
  end
234
-
235
- extend self
236
245
  end
237
246
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  namespace :bullet do
2
4
  namespace :log do
3
5
  desc 'Truncates the bullet log file to zero bytes'
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.7.0
4
+ version: 5.8.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: 2017-12-03 00:00:00.000000000 Z
11
+ date: 2018-10-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -30,14 +30,14 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 1.10.0
33
+ version: '1.11'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: 1.10.0
40
+ version: '1.11'
41
41
  description: help to kill N+1 queries and unused eager loading.
42
42
  email:
43
43
  - flyerhzm@gmail.com
@@ -133,6 +133,7 @@ files:
133
133
  - spec/models/entry.rb
134
134
  - spec/models/firm.rb
135
135
  - spec/models/folder.rb
136
+ - spec/models/group.rb
136
137
  - spec/models/mongoid/address.rb
137
138
  - spec/models/mongoid/category.rb
138
139
  - spec/models/mongoid/comment.rb
@@ -160,10 +161,12 @@ files:
160
161
  - tasks/bullet_tasks.rake
161
162
  - test.sh
162
163
  - update.sh
163
- homepage: http://github.com/flyerhzm/bullet
164
+ homepage: https://github.com/flyerhzm/bullet
164
165
  licenses:
165
166
  - MIT
166
- metadata: {}
167
+ metadata:
168
+ changelog_uri: https://github.com/flyerhzm/bullet/blob/master/CHANGELOG.md
169
+ source_code_uri: https://github.com/flyerhzm/bullet
167
170
  post_install_message:
168
171
  rdoc_options: []
169
172
  require_paths:
@@ -180,7 +183,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
180
183
  version: 1.3.6
181
184
  requirements: []
182
185
  rubyforge_project:
183
- rubygems_version: 2.6.13
186
+ rubygems_version: 2.6.14
184
187
  signing_key:
185
188
  specification_version: 4
186
189
  summary: help to kill N+1 queries and unused eager loading.
@@ -218,6 +221,7 @@ test_files:
218
221
  - spec/models/entry.rb
219
222
  - spec/models/firm.rb
220
223
  - spec/models/folder.rb
224
+ - spec/models/group.rb
221
225
  - spec/models/mongoid/address.rb
222
226
  - spec/models/mongoid/category.rb
223
227
  - spec/models/mongoid/comment.rb