n1_loader 1.7.4 → 2.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.
- checksums.yaml +4 -4
- data/lib/n1_loader/active_record/{associations_preloader_v7.rb → associations_preloader.rb} +8 -0
- data/lib/n1_loader/active_record.rb +1 -1
- data/lib/n1_loader/ar_lazy_preload/loader_patch.rb +5 -2
- data/lib/n1_loader/core/loadable.rb +9 -1
- data/lib/n1_loader/core/loader.rb +15 -1
- data/lib/n1_loader/version.rb +1 -1
- metadata +24 -10
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: b26072476fbcb5cd1635a97c0139aef964d7e2d89d22bd2aaf0f10bf50314337
|
|
4
|
+
data.tar.gz: f998a2e0997e9c3657402fd5e351dfb02fc53d981cd63c0c723b3e09094ba5f0
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 70c3fcdf22685895f3ead6f1987b6044b3d926c40a19d1c3a10295066a26831f729d91ac07ae6b6044798de7cf47b83792565ce8d710efdeb44e56afd9a4a7c4
|
|
7
|
+
data.tar.gz: 21fd7cbb0bb2c2a751a74c3773dec35ecfa37ea1467fa553c7021142809053ede73a6a7149bab92da9529619e045d1bbf2dd90a5600381a8a894c7fb6f75545c
|
|
@@ -26,7 +26,7 @@ ActiveSupport.on_load(:active_record) do
|
|
|
26
26
|
require_relative "active_record/associations_preloader_v5"
|
|
27
27
|
ActiveRecord::Associations::Preloader.prepend(N1Loader::ActiveRecord::Associations::Preloader)
|
|
28
28
|
else
|
|
29
|
-
require_relative "active_record/
|
|
29
|
+
require_relative "active_record/associations_preloader"
|
|
30
30
|
ActiveRecord::Associations::Preloader::Branch.prepend(N1Loader::ActiveRecord::Associations::Preloader)
|
|
31
31
|
end
|
|
32
32
|
|
|
@@ -7,12 +7,15 @@ module N1Loader
|
|
|
7
7
|
attr_accessor :context_setup
|
|
8
8
|
|
|
9
9
|
def loaded
|
|
10
|
-
return @loaded if @
|
|
10
|
+
return @loaded if @already_loaded && @already_context
|
|
11
11
|
|
|
12
12
|
super
|
|
13
13
|
|
|
14
|
-
|
|
14
|
+
synchronize do
|
|
15
|
+
context_setup&.call(@loaded.values.flatten) unless @already_context
|
|
16
|
+
end
|
|
15
17
|
|
|
18
|
+
@already_context = true
|
|
16
19
|
@loaded
|
|
17
20
|
end
|
|
18
21
|
end
|
|
@@ -32,8 +32,16 @@ module N1Loader
|
|
|
32
32
|
n1_loaders[name]
|
|
33
33
|
end
|
|
34
34
|
|
|
35
|
+
def n1_bind_to(collection)
|
|
36
|
+
@n1_binding = collection
|
|
37
|
+
end
|
|
38
|
+
|
|
35
39
|
def n1_loader_reload(name)
|
|
36
|
-
|
|
40
|
+
elements = @n1_binding || [self]
|
|
41
|
+
collection = LoaderCollection.new(self.class.n1_loaders[name], elements)
|
|
42
|
+
|
|
43
|
+
@n1_binding&.each { |el| el.n1_loaders[name] = collection if el.respond_to?(:n1_loaders) }
|
|
44
|
+
n1_loaders[name] = collection
|
|
37
45
|
end
|
|
38
46
|
|
|
39
47
|
def n1_clear_cache
|
|
@@ -6,6 +6,8 @@ module N1Loader
|
|
|
6
6
|
# Subclasses must define +perform+ method that accepts single argument
|
|
7
7
|
# and returns hash where key is the element and value is what we want to load.
|
|
8
8
|
class Loader
|
|
9
|
+
prepend MonitorMixin
|
|
10
|
+
|
|
9
11
|
class << self
|
|
10
12
|
attr_reader :arguments
|
|
11
13
|
|
|
@@ -105,7 +107,17 @@ module N1Loader
|
|
|
105
107
|
end
|
|
106
108
|
|
|
107
109
|
def loaded
|
|
108
|
-
return @loaded if @
|
|
110
|
+
return @loaded if @already_loaded
|
|
111
|
+
|
|
112
|
+
synchronize do
|
|
113
|
+
non_thread_safe_loaded unless @already_loaded
|
|
114
|
+
end
|
|
115
|
+
|
|
116
|
+
@loaded
|
|
117
|
+
end
|
|
118
|
+
|
|
119
|
+
def non_thread_safe_loaded # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
|
|
120
|
+
return @loaded if @already_loaded
|
|
109
121
|
|
|
110
122
|
check_arguments!
|
|
111
123
|
|
|
@@ -114,9 +126,11 @@ module N1Loader
|
|
|
114
126
|
if respond_to?(:single) && elements.size == 1
|
|
115
127
|
fulfill(elements.first, single(elements.first))
|
|
116
128
|
elsif elements.any?
|
|
129
|
+
elements.each { |el| el.n1_bind_to(elements) if el.respond_to?(:n1_bind_to) }
|
|
117
130
|
perform(elements)
|
|
118
131
|
end
|
|
119
132
|
|
|
133
|
+
@already_loaded = true
|
|
120
134
|
@loaded
|
|
121
135
|
end
|
|
122
136
|
end
|
data/lib/n1_loader/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,15 +1,29 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: n1_loader
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 2.1.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Evgeniy Demin
|
|
8
|
-
autorequire:
|
|
8
|
+
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2026-03-07 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
|
+
- !ruby/object:Gem::Dependency
|
|
14
|
+
name: mutex_m
|
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
|
16
|
+
requirements:
|
|
17
|
+
- - ">="
|
|
18
|
+
- !ruby/object:Gem::Version
|
|
19
|
+
version: '0'
|
|
20
|
+
type: :runtime
|
|
21
|
+
prerelease: false
|
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
23
|
+
requirements:
|
|
24
|
+
- - ">="
|
|
25
|
+
- !ruby/object:Gem::Version
|
|
26
|
+
version: '0'
|
|
13
27
|
- !ruby/object:Gem::Dependency
|
|
14
28
|
name: activerecord
|
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -126,17 +140,17 @@ dependencies:
|
|
|
126
140
|
name: sqlite3
|
|
127
141
|
requirement: !ruby/object:Gem::Requirement
|
|
128
142
|
requirements:
|
|
129
|
-
- - "
|
|
143
|
+
- - ">="
|
|
130
144
|
- !ruby/object:Gem::Version
|
|
131
145
|
version: '1.3'
|
|
132
146
|
type: :development
|
|
133
147
|
prerelease: false
|
|
134
148
|
version_requirements: !ruby/object:Gem::Requirement
|
|
135
149
|
requirements:
|
|
136
|
-
- - "
|
|
150
|
+
- - ">="
|
|
137
151
|
- !ruby/object:Gem::Version
|
|
138
152
|
version: '1.3'
|
|
139
|
-
description:
|
|
153
|
+
description:
|
|
140
154
|
email:
|
|
141
155
|
- lawliet.djez@gmail.com
|
|
142
156
|
executables: []
|
|
@@ -145,9 +159,9 @@ extra_rdoc_files: []
|
|
|
145
159
|
files:
|
|
146
160
|
- lib/n1_loader.rb
|
|
147
161
|
- lib/n1_loader/active_record.rb
|
|
162
|
+
- lib/n1_loader/active_record/associations_preloader.rb
|
|
148
163
|
- lib/n1_loader/active_record/associations_preloader_v5.rb
|
|
149
164
|
- lib/n1_loader/active_record/associations_preloader_v6.rb
|
|
150
|
-
- lib/n1_loader/active_record/associations_preloader_v7.rb
|
|
151
165
|
- lib/n1_loader/active_record/base.rb
|
|
152
166
|
- lib/n1_loader/active_record/loader.rb
|
|
153
167
|
- lib/n1_loader/active_record/loader_collection.rb
|
|
@@ -174,7 +188,7 @@ metadata:
|
|
|
174
188
|
source_code_uri: https://github.com/djezzzl/n1_loader
|
|
175
189
|
changelog_uri: https://github.com/djezzzl/n1_loader/master/CHANGELOG.md
|
|
176
190
|
funding_uri: https://opencollective.com/n1_loader#support
|
|
177
|
-
post_install_message:
|
|
191
|
+
post_install_message:
|
|
178
192
|
rdoc_options: []
|
|
179
193
|
require_paths:
|
|
180
194
|
- lib
|
|
@@ -189,8 +203,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
189
203
|
- !ruby/object:Gem::Version
|
|
190
204
|
version: '0'
|
|
191
205
|
requirements: []
|
|
192
|
-
rubygems_version: 3.4.
|
|
193
|
-
signing_key:
|
|
206
|
+
rubygems_version: 3.4.19
|
|
207
|
+
signing_key:
|
|
194
208
|
specification_version: 4
|
|
195
209
|
summary: Loader to solve N+1 issue for good.
|
|
196
210
|
test_files: []
|