n1_loader 2.1.0 → 2.2.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b26072476fbcb5cd1635a97c0139aef964d7e2d89d22bd2aaf0f10bf50314337
4
- data.tar.gz: f998a2e0997e9c3657402fd5e351dfb02fc53d981cd63c0c723b3e09094ba5f0
3
+ metadata.gz: 56479004f7a3456664bac05e808268177dabffa616848b57efb734865fd5ec49
4
+ data.tar.gz: 2d65c334abe26c5eb9baeb17ebe186d201b6c362b60d628758defd696b3e3522
5
5
  SHA512:
6
- metadata.gz: 70c3fcdf22685895f3ead6f1987b6044b3d926c40a19d1c3a10295066a26831f729d91ac07ae6b6044798de7cf47b83792565ce8d710efdeb44e56afd9a4a7c4
7
- data.tar.gz: 21fd7cbb0bb2c2a751a74c3773dec35ecfa37ea1467fa553c7021142809053ede73a6a7149bab92da9529619e045d1bbf2dd90a5600381a8a894c7fb6f75545c
6
+ metadata.gz: 9d83a5cc7742f23b0702f56fbcd2320f46e309731c7734df825406a657709259dae08e2e3ed78db322f815438e5e0db82cbe40799e02bb7d0f7cd469ad453585
7
+ data.tar.gz: 225fa5c982e60ceaae8d5a8cbd90ff6ecd8d54cff5105bc1338d45e6fb9969586af5ced3fa6b3a7c6948a453ee7bd7956a30f2972527719d32467116da48f7ce
@@ -7,16 +7,16 @@ module N1Loader
7
7
  attr_accessor :context_setup
8
8
 
9
9
  def loaded
10
- return @loaded if @already_loaded && @already_context
10
+ return @loaded_by_identity 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
15
+ context_setup&.call(@loaded_by_identity.values.flatten) unless @already_context
16
16
  end
17
17
 
18
18
  @already_context = true
19
- @loaded
19
+ @loaded_by_identity
20
20
  end
21
21
  end
22
22
  end
@@ -45,6 +45,7 @@ module N1Loader
45
45
  end
46
46
 
47
47
  def n1_clear_cache
48
+ @n1_binding = nil
48
49
  self.class.n1_loaders.each_key do |name|
49
50
  n1_loaders[name] = nil
50
51
  end
@@ -47,12 +47,16 @@ module N1Loader
47
47
  end
48
48
 
49
49
  def for(element)
50
- if loaded.empty? && elements.any?
50
+ identity_loaded = loaded
51
+
52
+ if identity_loaded.empty? && elements.any?
51
53
  raise NotFilled, "Nothing was preloaded, perhaps you forgot to use fulfill method"
52
54
  end
53
- raise NotLoaded, "The data was not preloaded for the given element" unless loaded.key?(element)
54
55
 
55
- loaded[element]
56
+ return identity_loaded[element] if identity_loaded.key?(element)
57
+ return @loaded_by_value[element] if @loaded_by_value.key?(element)
58
+
59
+ raise NotLoaded, "The data was not preloaded for the given element"
56
60
  end
57
61
 
58
62
  def cache_key
@@ -103,25 +107,28 @@ module N1Loader
103
107
  end
104
108
 
105
109
  def fulfill(element, value)
106
- @loaded[element] = value
110
+ @loaded_by_identity[element] = value
111
+ @loaded_by_value[element] = value
107
112
  end
108
113
 
109
- def loaded
110
- return @loaded if @already_loaded
114
+ def ensure_loaded
115
+ return if @already_loaded
111
116
 
112
- synchronize do
113
- non_thread_safe_loaded unless @already_loaded
114
- end
117
+ synchronize { non_thread_safe_loaded unless @already_loaded }
118
+ end
115
119
 
116
- @loaded
120
+ def loaded
121
+ ensure_loaded
122
+ @loaded_by_identity
117
123
  end
118
124
 
119
125
  def non_thread_safe_loaded # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
120
- return @loaded if @already_loaded
126
+ return if @already_loaded
121
127
 
122
128
  check_arguments!
123
129
 
124
- @loaded = {}
130
+ @loaded_by_identity = {}.compare_by_identity
131
+ @loaded_by_value = {}
125
132
 
126
133
  if respond_to?(:single) && elements.size == 1
127
134
  fulfill(elements.first, single(elements.first))
@@ -131,7 +138,6 @@ module N1Loader
131
138
  end
132
139
 
133
140
  @already_loaded = true
134
- @loaded
135
141
  end
136
142
  end
137
143
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module N1Loader
4
- VERSION = "2.1.0"
4
+ VERSION = "2.2.0"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: n1_loader
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.0
4
+ version: 2.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Evgeniy Demin
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2026-03-07 00:00:00.000000000 Z
11
+ date: 2026-03-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: mutex_m