n1_loader 1.7.4 → 2.0.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6a80439f77077004912f1e3bdcd9d7352691d92da0350e474e8286a6deb0f3f5
4
- data.tar.gz: 414c47adbfd1cbff273085b7c1728a7db40eeb5c17e578d131ccc1f0a8cd2899
3
+ metadata.gz: 1ed46e8e8cbb342314dc3b81c510723aa2b010c927077c074ed487db90c762c2
4
+ data.tar.gz: 6a79ef2b754868d40b8afb4b32533613f381df639eafc4b255fb5cf464df30ee
5
5
  SHA512:
6
- metadata.gz: 5d0bf3469584e36dffc65a36960cf8190272f71d71a91c1e8ab8bda04ebce1525f09061f46f395d9b91d88f950b745cee37be3758d9ef5d23ea936d27419fc3b
7
- data.tar.gz: a2c718ab66fb8055261d31ef0424f9739493636e081ed0301bc92a7d251bb9a53284c714857740f5ab81b892c71e9748a5c99079c90a5036bd88fcc1e279dc5d
6
+ metadata.gz: df36fc5c04279a5dd7bba45979a86ae8e8c3775c210a6fef524139ce9460df59c0d8a23533e2825e5bc42db4f129a71d97b345adbc29777afcbc61a06b0ab3a8
7
+ data.tar.gz: 34ea3a6340cbf790da5fe0245939b0d0cd999ef5e656860c222eda1ed64bc068958b7a765b53b6dff25c86d781af5e781c372dcf5755da74e8ad5ebe09dc84f0
@@ -8,6 +8,14 @@ module N1Loader
8
8
  def options
9
9
  {}
10
10
  end
11
+
12
+ def deprecated?
13
+ false
14
+ end
15
+
16
+ def through_reflection?
17
+ false
18
+ end
11
19
  end
12
20
 
13
21
  def preloaders_for_reflection(reflection, records)
@@ -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/associations_preloader_v7"
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 @loaded
10
+ return @loaded if @already_loaded && @already_context
11
11
 
12
12
  super
13
13
 
14
- context_setup&.call(preloaded_records)
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
@@ -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 @loaded
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
120
+ return @loaded if @already_loaded
109
121
 
110
122
  check_arguments!
111
123
 
@@ -117,6 +129,7 @@ module N1Loader
117
129
  perform(elements)
118
130
  end
119
131
 
132
+ @already_loaded = true
120
133
  @loaded
121
134
  end
122
135
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module N1Loader
4
- VERSION = "1.7.4"
4
+ VERSION = "2.0.1"
5
5
  end
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.7.4
4
+ version: 2.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Evgeniy Demin
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-12-18 00:00:00.000000000 Z
11
+ date: 2025-12-28 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,14 +140,14 @@ 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
153
  description:
@@ -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
@@ -189,7 +203,7 @@ 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.21
206
+ rubygems_version: 3.2.33
193
207
  signing_key:
194
208
  specification_version: 4
195
209
  summary: Loader to solve N+1 issue for good.