bulletmark_repairer 0.1.5 → 0.1.6
Sign up to get free protection for your applications and to get access to all the features.
- 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
|