bulletmark_repairer 0.1.5 → 0.1.6
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 +4 -4
- data/CHANGELOG.md +4 -0
- data/lib/bulletmark_repairer/monkey_patches/active_record/query_method.rb +3 -3
- data/lib/bulletmark_repairer/rack.rb +4 -7
- data/lib/bulletmark_repairer/thread.rb +30 -0
- data/lib/bulletmark_repairer/version.rb +1 -1
- data/lib/bulletmark_repairer.rb +1 -0
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5eabc96bcf1961f834090322c3b9a62173139f806513c5ec99d452f18a661c71
|
4
|
+
data.tar.gz: b55ab6f5adade690b6cb34ef92fc752bdfa697a3b8d7779d54150aaf4e1083bb
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 714da7b74b7015194f965c83c1260d31b8a4f75b4f7a24b3038eac6c81ced4aa8a77a79abbe5a684a347093fbb00d0e9f1b05682729b96afe64ed2a83b110534
|
7
|
+
data.tar.gz: e48064688caaa2003d30192bfd2a76ff677fdcb4b4bb02bb8b828fece22b9fd5dab69a47aef2fb836a69e9f5b16db10d2c1faefcb9e249ba5b8a3df671310c03
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,7 @@
|
|
1
|
+
## [0.1.6] - 2023-11-09
|
2
|
+
|
3
|
+
Fix a bug when N+1 is caused not in the request (e.g. Sidekiq) [51f051e](https://github.com/makicamel/bulletmark_repairer/commit/51f051e608b84b7da96ac879a324ed438c14eeeb)
|
4
|
+
|
1
5
|
## [0.1.5] - 2023-10-27
|
2
6
|
|
3
7
|
Be able to patch for nested associations require `includes` though child associations are already included [d1b7445](https://github.com/makicamel/bulletmark_repairer/commit/d1b7445556c20bc037beb6a013ac70531426a7ea)
|
@@ -4,17 +4,17 @@ module BulletmarkRepairer
|
|
4
4
|
module ActiveRecord
|
5
5
|
module QueryMethod
|
6
6
|
def includes(*args)
|
7
|
-
Thread.
|
7
|
+
BulletmarkRepairer::Thread.add(name: model.name, method_type: :includes, args: args)
|
8
8
|
super(args)
|
9
9
|
end
|
10
10
|
|
11
11
|
def eager_load(*args)
|
12
|
-
Thread.
|
12
|
+
BulletmarkRepairer::Thread.add(name: model.name, method_type: :eager_load, args: args)
|
13
13
|
super(args)
|
14
14
|
end
|
15
15
|
|
16
16
|
def preload(*args)
|
17
|
-
Thread.
|
17
|
+
BulletmarkRepairer::Thread.add(name: model.name, method_type: :preload, args: args)
|
18
18
|
super(args)
|
19
19
|
end
|
20
20
|
end
|
@@ -7,24 +7,21 @@ module BulletmarkRepairer
|
|
7
7
|
end
|
8
8
|
|
9
9
|
def call(env)
|
10
|
-
Thread.current[:bulletmark_repaier_loaded_associations] = Hash.new do |hash, key|
|
11
|
-
hash[key] = { includes: Set.new, eager_load: Set.new, preload: Set.new }
|
12
|
-
end
|
13
10
|
@app.call(env)
|
14
11
|
ensure
|
15
12
|
begin
|
16
|
-
if Thread.current[:bullet_notification_collector].notifications_present?
|
13
|
+
if ::Thread.current[:bullet_notification_collector].notifications_present?
|
17
14
|
BulletmarkRepairer::Patcher.execute(
|
18
|
-
notifications: Thread.current[:bullet_notification_collector],
|
15
|
+
notifications: ::Thread.current[:bullet_notification_collector],
|
19
16
|
controller: env['action_dispatch.request.parameters']['controller'],
|
20
17
|
action: env['action_dispatch.request.parameters']['action'],
|
21
|
-
loaded_associations: Thread.current
|
18
|
+
loaded_associations: BulletmarkRepairer::Thread.current
|
22
19
|
)
|
23
20
|
end
|
24
21
|
rescue StandardError => e
|
25
22
|
raise e if BulletmarkRepairer.config.debug?
|
26
23
|
end
|
27
|
-
Thread.
|
24
|
+
BulletmarkRepairer::Thread.clear
|
28
25
|
end
|
29
26
|
end
|
30
27
|
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'rails'
|
4
|
+
|
5
|
+
module BulletmarkRepairer
|
6
|
+
class Thread
|
7
|
+
class << self
|
8
|
+
def current
|
9
|
+
touch
|
10
|
+
end
|
11
|
+
|
12
|
+
def add(name:, method_type:, args:)
|
13
|
+
touch
|
14
|
+
::Thread.current[:bulletmark_repaier_loaded_associations][name][method_type].add(args)
|
15
|
+
end
|
16
|
+
|
17
|
+
def clear
|
18
|
+
::Thread.current[:bulletmark_repaier_loaded_associations] = nil
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
def touch
|
24
|
+
::Thread.current[:bulletmark_repaier_loaded_associations] ||= Hash.new do |hash, key|
|
25
|
+
hash[key] = { includes: Set.new, eager_load: Set.new, preload: Set.new }
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
data/lib/bulletmark_repairer.rb
CHANGED
@@ -9,6 +9,7 @@ require 'bulletmark_repairer/corrector_builder'
|
|
9
9
|
require 'bulletmark_repairer/loaded_associations'
|
10
10
|
require 'bulletmark_repairer/markers'
|
11
11
|
require 'bulletmark_repairer/patcher'
|
12
|
+
require 'bulletmark_repairer/thread'
|
12
13
|
|
13
14
|
module BulletmarkRepairer
|
14
15
|
class Error < StandardError; end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: bulletmark_repairer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- makicamel
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-11-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -95,6 +95,7 @@ files:
|
|
95
95
|
- lib/bulletmark_repairer/rack.rb
|
96
96
|
- lib/bulletmark_repairer/railtie.rb
|
97
97
|
- lib/bulletmark_repairer/retry_corrector.rb
|
98
|
+
- lib/bulletmark_repairer/thread.rb
|
98
99
|
- lib/bulletmark_repairer/version.rb
|
99
100
|
- sig/bulletmark_repairer.rbs
|
100
101
|
homepage: https://github.com/makicamel/bulletmark_repairer
|
@@ -120,7 +121,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
120
121
|
- !ruby/object:Gem::Version
|
121
122
|
version: '0'
|
122
123
|
requirements: []
|
123
|
-
rubygems_version: 3.4
|
124
|
+
rubygems_version: 3.1.4
|
124
125
|
signing_key:
|
125
126
|
specification_version: 4
|
126
127
|
summary: Auto corrector for N+1 queries detected at runtime with Bullet
|