bullet 6.1.0 → 7.0.7

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 (64) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/main.yml +82 -0
  3. data/CHANGELOG.md +66 -0
  4. data/Gemfile.rails-6.0 +1 -1
  5. data/Gemfile.rails-6.1 +15 -0
  6. data/Gemfile.rails-7.0 +10 -0
  7. data/MIT-LICENSE +1 -1
  8. data/README.md +41 -27
  9. data/lib/bullet/active_job.rb +5 -1
  10. data/lib/bullet/active_record41.rb +1 -0
  11. data/lib/bullet/active_record42.rb +1 -0
  12. data/lib/bullet/active_record5.rb +10 -8
  13. data/lib/bullet/active_record52.rb +32 -25
  14. data/lib/bullet/active_record60.rb +30 -23
  15. data/lib/bullet/active_record61.rb +274 -0
  16. data/lib/bullet/active_record70.rb +284 -0
  17. data/lib/bullet/bullet_xhr.js +18 -17
  18. data/lib/bullet/dependency.rb +16 -0
  19. data/lib/bullet/detector/association.rb +8 -0
  20. data/lib/bullet/detector/base.rb +2 -1
  21. data/lib/bullet/detector/counter_cache.rb +2 -2
  22. data/lib/bullet/detector/n_plus_one_query.rb +24 -13
  23. data/lib/bullet/detector/unused_eager_loading.rb +3 -3
  24. data/lib/bullet/mongoid4x.rb +1 -1
  25. data/lib/bullet/mongoid5x.rb +1 -1
  26. data/lib/bullet/mongoid6x.rb +1 -1
  27. data/lib/bullet/mongoid7x.rb +32 -17
  28. data/lib/bullet/notification.rb +2 -1
  29. data/lib/bullet/rack.rb +64 -23
  30. data/lib/bullet/registry/call_stack.rb +12 -0
  31. data/lib/bullet/registry.rb +1 -0
  32. data/lib/bullet/stack_trace_filter.rb +15 -15
  33. data/lib/bullet/version.rb +1 -1
  34. data/lib/bullet.rb +35 -29
  35. data/lib/generators/bullet/install_generator.rb +22 -25
  36. data/perf/benchmark.rb +4 -1
  37. data/spec/bullet/detector/counter_cache_spec.rb +1 -1
  38. data/spec/bullet/detector/n_plus_one_query_spec.rb +1 -33
  39. data/spec/bullet/detector/unused_eager_loading_spec.rb +15 -10
  40. data/spec/bullet/ext/object_spec.rb +1 -1
  41. data/spec/bullet/notification/base_spec.rb +4 -4
  42. data/spec/bullet/notification/n_plus_one_query_spec.rb +1 -3
  43. data/spec/bullet/rack_spec.rb +152 -9
  44. data/spec/bullet/stack_trace_filter_spec.rb +26 -0
  45. data/spec/bullet_spec.rb +15 -15
  46. data/spec/integration/active_record/association_spec.rb +95 -12
  47. data/spec/integration/counter_cache_spec.rb +4 -4
  48. data/spec/integration/mongoid/association_spec.rb +4 -4
  49. data/spec/models/attachment.rb +5 -0
  50. data/spec/models/deal.rb +5 -0
  51. data/spec/models/folder.rb +2 -1
  52. data/spec/models/group.rb +2 -1
  53. data/spec/models/page.rb +2 -1
  54. data/spec/models/post.rb +2 -0
  55. data/spec/models/role.rb +7 -0
  56. data/spec/models/submission.rb +1 -0
  57. data/spec/models/user.rb +2 -0
  58. data/spec/models/writer.rb +2 -1
  59. data/spec/spec_helper.rb +0 -2
  60. data/spec/support/mongo_seed.rb +1 -0
  61. data/spec/support/sqlite_seed.rb +38 -0
  62. data/test.sh +2 -0
  63. metadata +20 -7
  64. data/.travis.yml +0 -33
@@ -58,6 +58,19 @@ if active_record?
58
58
  expect(Bullet::Detector::Association).to be_completely_preloading_associations
59
59
  end
60
60
 
61
+ it 'should detect non preload comment => post with inverse_of from a query' do
62
+ Post.first.comments.find_each do |comment|
63
+ comment.name
64
+ comment.post.name
65
+ end
66
+
67
+ Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
68
+ expect(Post.first.comments.count).not_to eq(0)
69
+ expect(Bullet::Detector::Association).not_to be_has_unused_preload_associations
70
+
71
+ expect(Bullet::Detector::Association).to be_completely_preloading_associations
72
+ end
73
+
61
74
  it 'should detect non preload post => comments with empty?' do
62
75
  Post.all.each { |post| post.comments.empty? }
63
76
  Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
@@ -129,7 +142,7 @@ if active_record?
129
142
  expect(Bullet::Detector::Association).to be_completely_preloading_associations
130
143
  end
131
144
 
132
- it 'should detect unused preload with post => commnets, no category => posts' do
145
+ it 'should detect unused preload with post => comments, no category => posts' do
133
146
  Category.includes(posts: :comments).each { |category| category.posts.map(&:name) }
134
147
  Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
135
148
  expect(Bullet::Detector::Association).to be_unused_preload_associations_for(Post, :comments)
@@ -202,7 +215,7 @@ if active_record?
202
215
  expect(Bullet::Detector::Association).to be_completely_preloading_associations
203
216
  end
204
217
 
205
- it 'should detect preload with post => commnets' do
218
+ it 'should detect preload with post => comments' do
206
219
  Post.first.comments.map(&:name)
207
220
  Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
208
221
  expect(Bullet::Detector::Association).not_to be_has_unused_preload_associations
@@ -377,8 +390,7 @@ if active_record?
377
390
  it 'should detect unused preload with comment => author' do
378
391
  Comment.includes([:author, { post: :writer }]).where(['base_users.id = ?', BaseUser.first]).references(
379
392
  :base_users
380
- )
381
- .each { |comment| comment.post.writer.name }
393
+ ).each { |comment| comment.post.writer.name }
382
394
  Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
383
395
  expect(Bullet::Detector::Association).not_to be_has_unused_preload_associations
384
396
 
@@ -402,6 +414,15 @@ if active_record?
402
414
  end
403
415
 
404
416
  describe Bullet::Detector::Association, 'has_and_belongs_to_many' do
417
+ context 'posts <=> deals' do
418
+ it 'should detect preload associations with join tables that have identifier' do
419
+ Post.includes(:deals).each { |post| post.deals.map(&:name) }
420
+ Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
421
+ expect(Bullet::Detector::Association).not_to be_has_unused_preload_associations
422
+
423
+ expect(Bullet::Detector::Association).to be_completely_preloading_associations
424
+ end
425
+ end
405
426
  context 'students <=> teachers' do
406
427
  it 'should detect non preload associations' do
407
428
  Student.all.each { |student| student.teachers.map(&:name) }
@@ -443,6 +464,16 @@ if active_record?
443
464
  expect(Bullet::Detector::Association).to be_detecting_unpreloaded_association_for(Student, :teachers)
444
465
  end
445
466
  end
467
+
468
+ context 'user => roles' do
469
+ it 'should detect preload associations' do
470
+ User.first.roles.includes(:resource).each { |role| role.resource }
471
+ Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
472
+ expect(Bullet::Detector::Association).not_to be_has_unused_preload_associations
473
+
474
+ expect(Bullet::Detector::Association).to be_completely_preloading_associations
475
+ end
476
+ end
446
477
  end
447
478
 
448
479
  describe Bullet::Detector::Association, 'has_many :through' do
@@ -456,7 +487,15 @@ if active_record?
456
487
  end
457
488
 
458
489
  it 'should detect preload associations' do
459
- Firm.includes(:clients).each { |firm| firm.clients.map(&:name) }
490
+ Firm.preload(:clients).each { |firm| firm.clients.map(&:name) }
491
+ Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
492
+ expect(Bullet::Detector::Association).not_to be_has_unused_preload_associations
493
+
494
+ expect(Bullet::Detector::Association).to be_completely_preloading_associations
495
+ end
496
+
497
+ it 'should detect eager load association' do
498
+ Firm.eager_load(:clients).each { |firm| firm.clients.map(&:name) }
460
499
  Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
461
500
  expect(Bullet::Detector::Association).not_to be_has_unused_preload_associations
462
501
 
@@ -490,7 +529,15 @@ if active_record?
490
529
  end
491
530
 
492
531
  it 'should detect preload associations' do
493
- Firm.includes(:groups).each { |firm| firm.groups.map(&:name) }
532
+ Firm.preload(:groups).each { |firm| firm.groups.map(&:name) }
533
+ Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
534
+ expect(Bullet::Detector::Association).not_to be_has_unused_preload_associations
535
+
536
+ expect(Bullet::Detector::Association).to be_completely_preloading_associations
537
+ end
538
+
539
+ it 'should detect eager load associations' do
540
+ Firm.eager_load(:groups).each { |firm| firm.groups.map(&:name) }
494
541
  Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
495
542
  expect(Bullet::Detector::Association).not_to be_has_unused_preload_associations
496
543
 
@@ -562,6 +609,42 @@ if active_record?
562
609
  end
563
610
  end
564
611
 
612
+ describe Bullet::Detector::Association, 'has_one :through' do
613
+ context 'user => attachment' do
614
+ it 'should detect non preload associations' do
615
+ User.all.each { |user| user.submission_attachment.file_name }
616
+ Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
617
+ expect(Bullet::Detector::Association).not_to be_has_unused_preload_associations
618
+
619
+ expect(Bullet::Detector::Association).to be_detecting_unpreloaded_association_for(User, :submission_attachment)
620
+ end
621
+
622
+ it 'should detect preload associations' do
623
+ User.includes(:submission_attachment).each { |user| user.submission_attachment.file_name }
624
+ Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
625
+ expect(Bullet::Detector::Association).not_to be_has_unused_preload_associations
626
+
627
+ expect(Bullet::Detector::Association).to be_completely_preloading_associations
628
+ end
629
+
630
+ it 'should not detect preload associations' do
631
+ User.all.map(&:name)
632
+ Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
633
+ expect(Bullet::Detector::Association).not_to be_has_unused_preload_associations
634
+
635
+ expect(Bullet::Detector::Association).to be_completely_preloading_associations
636
+ end
637
+
638
+ it 'should detect unused preload associations' do
639
+ User.includes(:submission_attachment).map(&:name)
640
+ Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
641
+ expect(Bullet::Detector::Association).to be_unused_preload_associations_for(User, :submission_attachment)
642
+
643
+ expect(Bullet::Detector::Association).to be_completely_preloading_associations
644
+ end
645
+ end
646
+ end
647
+
565
648
  describe Bullet::Detector::Association, 'call one association that in possible objects' do
566
649
  it 'should not detect preload association' do
567
650
  Post.all
@@ -694,9 +777,9 @@ if active_record?
694
777
  end
695
778
  end
696
779
 
697
- context 'whitelist n plus one query' do
698
- before { Bullet.add_whitelist type: :n_plus_one_query, class_name: 'Post', association: :comments }
699
- after { Bullet.clear_whitelist }
780
+ context 'add n plus one query to safelist' do
781
+ before { Bullet.add_safelist type: :n_plus_one_query, class_name: 'Post', association: :comments }
782
+ after { Bullet.clear_safelist }
700
783
 
701
784
  it 'should not detect n plus one query' do
702
785
  Post.all.each { |post| post.comments.map(&:name) }
@@ -715,9 +798,9 @@ if active_record?
715
798
  end
716
799
  end
717
800
 
718
- context 'whitelist unused eager loading' do
719
- before { Bullet.add_whitelist type: :unused_eager_loading, class_name: 'Post', association: :comments }
720
- after { Bullet.clear_whitelist }
801
+ context 'add unused eager loading to safelist' do
802
+ before { Bullet.add_safelist type: :unused_eager_loading, class_name: 'Post', association: :comments }
803
+ after { Bullet.clear_safelist }
721
804
 
722
805
  it 'should not detect unused eager loading' do
723
806
  Post.includes(:comments).map(&:name)
@@ -28,7 +28,7 @@ if !mongoid? && active_record?
28
28
  expect(Bullet.collected_counter_cache_notifications).to be_empty
29
29
  end
30
30
 
31
- if active_record5? || active_record6?
31
+ if ActiveRecord::VERSION::MAJOR > 4
32
32
  it 'should not need counter cache for has_many through' do
33
33
  Client.all.each { |client| client.firms.size }
34
34
  expect(Bullet.collected_counter_cache_notifications).to be_empty
@@ -55,9 +55,9 @@ if !mongoid? && active_record?
55
55
  end
56
56
  end
57
57
 
58
- context 'whitelist' do
59
- before { Bullet.add_whitelist type: :counter_cache, class_name: 'Country', association: :cities }
60
- after { Bullet.clear_whitelist }
58
+ context 'safelist' do
59
+ before { Bullet.add_safelist type: :counter_cache, class_name: 'Country', association: :cities }
60
+ after { Bullet.clear_safelist }
61
61
 
62
62
  it 'should not detect counter cache' do
63
63
  Country.all.each { |country| country.cities.size }
@@ -73,9 +73,9 @@ if mongoid?
73
73
  expect(Bullet::Detector::Association).not_to be_has_unused_preload_associations
74
74
 
75
75
  expect(Bullet::Detector::Association).not_to be_detecting_unpreloaded_association_for(
76
- Mongoid::Category,
77
- :posts
78
- )
76
+ Mongoid::Category,
77
+ :posts
78
+ )
79
79
  expect(Bullet::Detector::Association).to be_detecting_unpreloaded_association_for(Mongoid::Category, :entries)
80
80
  end
81
81
 
@@ -118,7 +118,7 @@ if mongoid?
118
118
  expect(Bullet::Detector::Association).to be_completely_preloading_associations
119
119
  end
120
120
 
121
- it 'should detect preload with post => commnets' do
121
+ it 'should detect preload with post => comments' do
122
122
  Mongoid::Post.first.comments.map(&:name)
123
123
  Bullet::Detector::UnusedEagerLoading.check_unused_preload_associations
124
124
  expect(Bullet::Detector::Association).not_to be_has_unused_preload_associations
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Attachment < ActiveRecord::Base
4
+ belongs_to :submission
5
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Deal < ActiveRecord::Base
4
+ has_and_belongs_to_many :posts
5
+ end
@@ -1,3 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- class Folder < Document; end
3
+ class Folder < Document
4
+ end
data/spec/models/group.rb CHANGED
@@ -1,3 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- class Group < ActiveRecord::Base; end
3
+ class Group < ActiveRecord::Base
4
+ end
data/spec/models/page.rb CHANGED
@@ -1,3 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- class Page < Document; end
3
+ class Page < Document
4
+ end
data/spec/models/post.rb CHANGED
@@ -4,6 +4,7 @@ class Post < ActiveRecord::Base
4
4
  belongs_to :category, inverse_of: :posts
5
5
  belongs_to :writer
6
6
  has_many :comments, inverse_of: :post
7
+ has_and_belongs_to_many :deals
7
8
 
8
9
  validates :category, presence: true
9
10
 
@@ -21,6 +22,7 @@ class Post < ActiveRecord::Base
21
22
  next unless trigger_after_save
22
23
 
23
24
  temp_comment = Comment.new(post: self)
25
+
24
26
  # this triggers self to be "possible", even though it's
25
27
  # not saved yet
26
28
  temp_comment.post
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Role < ActiveRecord::Base
4
+ has_and_belongs_to_many :users
5
+
6
+ belongs_to :resource, polymorphic: true
7
+ end
@@ -3,4 +3,5 @@
3
3
  class Submission < ActiveRecord::Base
4
4
  belongs_to :user
5
5
  has_many :replies
6
+ has_one :attachment
6
7
  end
data/spec/models/user.rb CHANGED
@@ -2,5 +2,7 @@
2
2
 
3
3
  class User < ActiveRecord::Base
4
4
  has_one :submission
5
+ has_one :submission_attachment, through: :submission, source: :attachment, class_name: 'Attachment'
5
6
  belongs_to :category
7
+ has_and_belongs_to_many :roles
6
8
  end
@@ -1,3 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- class Writer < BaseUser; end
3
+ class Writer < BaseUser
4
+ end
data/spec/spec_helper.rb CHANGED
@@ -4,12 +4,10 @@ require 'rspec'
4
4
  begin
5
5
  require 'active_record'
6
6
  rescue LoadError
7
-
8
7
  end
9
8
  begin
10
9
  require 'mongoid'
11
10
  rescue LoadError
12
-
13
11
  end
14
12
 
15
13
  module Rails
@@ -45,6 +45,7 @@ module Support
45
45
  Mongoid.configure do |config|
46
46
  config.load_configuration(clients: { default: { database: 'bullet', hosts: %w[localhost:27017] } })
47
47
  end
48
+
48
49
  # Increase the level from DEBUG in order to avoid excessive logging to the screen
49
50
  Mongo::Logger.logger.level = Logger::WARN
50
51
  end
@@ -21,6 +21,13 @@ module Support
21
21
  post2 = category2.posts.create(name: 'second', writer: writer2)
22
22
  post3 = category2.posts.create(name: 'third', writer: writer2)
23
23
 
24
+ deal1 = Deal.new(name: 'Deal 1')
25
+ deal1.posts << post1
26
+ deal1.posts << post2
27
+ deal2 = Deal.new(name: 'Deal 2')
28
+ post1.deals << deal1
29
+ post1.deals << deal2
30
+
24
31
  comment1 = post1.comments.create(name: 'first', author: writer1)
25
32
  comment2 = post1.comments.create(name: 'first2', author: writer1)
26
33
  comment3 = post1.comments.create(name: 'first3', author: writer1)
@@ -85,9 +92,16 @@ module Support
85
92
  page3 = Page.create(name: 'page3', parent_id: folder2.id, author_id: author2.id)
86
93
  page4 = Page.create(name: 'page4', parent_id: folder2.id, author_id: author2.id)
87
94
 
95
+ role1 = Role.create(name: 'Admin')
96
+ role2 = Role.create(name: 'User')
97
+
88
98
  user1 = User.create(name: 'user1', category: category1)
89
99
  user2 = User.create(name: 'user2', category: category1)
90
100
 
101
+ user1.roles << role1
102
+ user1.roles << role2
103
+ user2.roles << role2
104
+
91
105
  submission1 = user1.create_submission(name: 'submission1')
92
106
  submission2 = user2.create_submission(name: 'submission2')
93
107
 
@@ -95,6 +109,9 @@ module Support
95
109
  submission1.replies.create(name: 'reply2')
96
110
  submission2.replies.create(name: 'reply3')
97
111
  submission2.replies.create(name: 'reply4')
112
+
113
+ submission1.create_attachment(file_name: 'submission1 file')
114
+ submission2.create_attachment(file_name: 'submission2 file')
98
115
  end
99
116
 
100
117
  def setup_db
@@ -153,6 +170,11 @@ module Support
153
170
  t.column :hotel_id, :integer
154
171
  end
155
172
 
173
+ create_table :deals_posts do |t|
174
+ t.column :deal_id, :integer
175
+ t.column :post_id, :integer
176
+ end
177
+
156
178
  create_table :documents do |t|
157
179
  t.string :name
158
180
  t.string :type
@@ -231,6 +253,17 @@ module Support
231
253
  t.column :submission_id, :integer
232
254
  end
233
255
 
256
+ create_table :roles do |t|
257
+ t.column :name, :string
258
+ t.column :resource_id, :integer
259
+ t.column :resource_type, :string
260
+ end
261
+
262
+ create_table :roles_users do |t|
263
+ t.column :role_id, :integer
264
+ t.column :user_id, :integer
265
+ end
266
+
234
267
  create_table :submissions do |t|
235
268
  t.column :name, :string
236
269
  t.column :user_id, :integer
@@ -240,6 +273,11 @@ module Support
240
273
  t.column :name, :string
241
274
  t.column :category_id, :integer
242
275
  end
276
+
277
+ create_table :attachments do |t|
278
+ t.column :file_name, :string
279
+ t.column :submission_id, :integer
280
+ end
243
281
  end
244
282
  end
245
283
  end
data/test.sh CHANGED
@@ -1,5 +1,7 @@
1
1
  #bundle update rails && bundle exec rspec spec
2
2
  #BUNDLE_GEMFILE=Gemfile.mongoid bundle update mongoid && BUNDLE_GEMFILE=Gemfile.mongoid bundle exec rspec spec
3
+ BUNDLE_GEMFILE=Gemfile.rails-7.0 bundle && BUNDLE_GEMFILE=Gemfile.rails-7.0 bundle exec rspec spec
4
+ BUNDLE_GEMFILE=Gemfile.rails-6.1 bundle && BUNDLE_GEMFILE=Gemfile.rails-6.1 bundle exec rspec spec
3
5
  BUNDLE_GEMFILE=Gemfile.rails-6.0 bundle && BUNDLE_GEMFILE=Gemfile.rails-6.0 bundle exec rspec spec
4
6
  BUNDLE_GEMFILE=Gemfile.rails-5.2 bundle && BUNDLE_GEMFILE=Gemfile.rails-5.2 bundle exec rspec spec
5
7
  BUNDLE_GEMFILE=Gemfile.rails-5.1 bundle && BUNDLE_GEMFILE=Gemfile.rails-5.1 bundle exec rspec spec
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: 6.1.0
4
+ version: 7.0.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Richard Huang
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-12-28 00:00:00.000000000 Z
11
+ date: 2023-01-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -45,9 +45,9 @@ executables: []
45
45
  extensions: []
46
46
  extra_rdoc_files: []
47
47
  files:
48
+ - ".github/workflows/main.yml"
48
49
  - ".gitignore"
49
50
  - ".rspec"
50
- - ".travis.yml"
51
51
  - CHANGELOG.md
52
52
  - Gemfile
53
53
  - Gemfile.mongoid
@@ -62,6 +62,8 @@ files:
62
62
  - Gemfile.rails-5.1
63
63
  - Gemfile.rails-5.2
64
64
  - Gemfile.rails-6.0
65
+ - Gemfile.rails-6.1
66
+ - Gemfile.rails-7.0
65
67
  - Guardfile
66
68
  - Hacking.md
67
69
  - MIT-LICENSE
@@ -76,6 +78,8 @@ files:
76
78
  - lib/bullet/active_record5.rb
77
79
  - lib/bullet/active_record52.rb
78
80
  - lib/bullet/active_record60.rb
81
+ - lib/bullet/active_record61.rb
82
+ - lib/bullet/active_record70.rb
79
83
  - lib/bullet/bullet_xhr.js
80
84
  - lib/bullet/dependency.rb
81
85
  - lib/bullet/detector.rb
@@ -100,6 +104,7 @@ files:
100
104
  - lib/bullet/registry.rb
101
105
  - lib/bullet/registry/association.rb
102
106
  - lib/bullet/registry/base.rb
107
+ - lib/bullet/registry/call_stack.rb
103
108
  - lib/bullet/registry/object.rb
104
109
  - lib/bullet/stack_trace_filter.rb
105
110
  - lib/bullet/version.rb
@@ -122,11 +127,13 @@ files:
122
127
  - spec/bullet/registry/association_spec.rb
123
128
  - spec/bullet/registry/base_spec.rb
124
129
  - spec/bullet/registry/object_spec.rb
130
+ - spec/bullet/stack_trace_filter_spec.rb
125
131
  - spec/bullet_spec.rb
126
132
  - spec/integration/active_record/association_spec.rb
127
133
  - spec/integration/counter_cache_spec.rb
128
134
  - spec/integration/mongoid/association_spec.rb
129
135
  - spec/models/address.rb
136
+ - spec/models/attachment.rb
130
137
  - spec/models/author.rb
131
138
  - spec/models/base_user.rb
132
139
  - spec/models/category.rb
@@ -135,6 +142,7 @@ files:
135
142
  - spec/models/comment.rb
136
143
  - spec/models/company.rb
137
144
  - spec/models/country.rb
145
+ - spec/models/deal.rb
138
146
  - spec/models/document.rb
139
147
  - spec/models/entry.rb
140
148
  - spec/models/firm.rb
@@ -154,6 +162,7 @@ files:
154
162
  - spec/models/post.rb
155
163
  - spec/models/relationship.rb
156
164
  - spec/models/reply.rb
165
+ - spec/models/role.rb
157
166
  - spec/models/student.rb
158
167
  - spec/models/submission.rb
159
168
  - spec/models/teacher.rb
@@ -173,7 +182,7 @@ licenses:
173
182
  metadata:
174
183
  changelog_uri: https://github.com/flyerhzm/bullet/blob/master/CHANGELOG.md
175
184
  source_code_uri: https://github.com/flyerhzm/bullet
176
- post_install_message:
185
+ post_install_message:
177
186
  rdoc_options: []
178
187
  require_paths:
179
188
  - lib
@@ -188,8 +197,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
188
197
  - !ruby/object:Gem::Version
189
198
  version: 1.3.6
190
199
  requirements: []
191
- rubygems_version: 3.0.3
192
- signing_key:
200
+ rubygems_version: 3.4.1
201
+ signing_key:
193
202
  specification_version: 4
194
203
  summary: help to kill N+1 queries and unused eager loading.
195
204
  test_files:
@@ -209,11 +218,13 @@ test_files:
209
218
  - spec/bullet/registry/association_spec.rb
210
219
  - spec/bullet/registry/base_spec.rb
211
220
  - spec/bullet/registry/object_spec.rb
221
+ - spec/bullet/stack_trace_filter_spec.rb
212
222
  - spec/bullet_spec.rb
213
223
  - spec/integration/active_record/association_spec.rb
214
224
  - spec/integration/counter_cache_spec.rb
215
225
  - spec/integration/mongoid/association_spec.rb
216
226
  - spec/models/address.rb
227
+ - spec/models/attachment.rb
217
228
  - spec/models/author.rb
218
229
  - spec/models/base_user.rb
219
230
  - spec/models/category.rb
@@ -222,6 +233,7 @@ test_files:
222
233
  - spec/models/comment.rb
223
234
  - spec/models/company.rb
224
235
  - spec/models/country.rb
236
+ - spec/models/deal.rb
225
237
  - spec/models/document.rb
226
238
  - spec/models/entry.rb
227
239
  - spec/models/firm.rb
@@ -241,6 +253,7 @@ test_files:
241
253
  - spec/models/post.rb
242
254
  - spec/models/relationship.rb
243
255
  - spec/models/reply.rb
256
+ - spec/models/role.rb
244
257
  - spec/models/student.rb
245
258
  - spec/models/submission.rb
246
259
  - spec/models/teacher.rb
data/.travis.yml DELETED
@@ -1,33 +0,0 @@
1
- language: ruby
2
- rvm:
3
- - 2.3.0
4
- - 2.6.0
5
- gemfile:
6
- - Gemfile.rails-6.0
7
- - Gemfile.rails-5.2
8
- - Gemfile.rails-5.1
9
- - Gemfile.rails-5.0
10
- - Gemfile.rails-4.2
11
- - Gemfile.rails-4.1
12
- - Gemfile.rails-4.0
13
- matrix:
14
- exclude:
15
- - rvm: 2.3.0
16
- gemfile: Gemfile.rails-6.0
17
- - rvm: 2.6.0
18
- gemfile: Gemfile.rails-5.2
19
- - rvm: 2.6.0
20
- gemfile: Gemfile.rails-5.1
21
- - rvm: 2.6.0
22
- gemfile: Gemfile.rails-5.0
23
- - rvm: 2.6.0
24
- gemfile: Gemfile.rails-4.2
25
- - rvm: 2.6.0
26
- gemfile: Gemfile.rails-4.1
27
- - rvm: 2.6.0
28
- gemfile: Gemfile.rails-4.0
29
- env:
30
- - DB=sqlite
31
- before_install:
32
- - "find /home/travis/.rvm/rubies -wholename '*default/bundler-*.gemspec' -delete"
33
- - gem install bundler -v '< 2'