goldiloader 4.2.0 → 5.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 60dd6e4947b269049f3a3348487771468d5dd5d9dc3a1029022ddbe88cc8ec37
4
- data.tar.gz: 4b064ab04a026f86e68cda4d196b128b175b4fa85ce16c2bcc6026a87f52aa62
3
+ metadata.gz: 4b14210a0559e4703e779410d7381cd84f4e25d808107ea4558bff158320ad66
4
+ data.tar.gz: 74bd3fc10220916fe12e8394731f0e4846ae157bd24922ca434f83800ee56cfc
5
5
  SHA512:
6
- metadata.gz: 7da14e3c1d7c8c2ce7d824bb3af676b7edd0dd5399889242c3cab874d26e957b8d9a3bcd6b2f29a6fb0aa88498d447538e1a5620f691a38b1dfa78b69dd6837a
7
- data.tar.gz: a124830cd0f6a34def8d4d59daabce9889d89da6840eeb5adff5b4f6266b159cb2b785c949c31a6f96d407319fdee3b777d96ddaba1b26e04094dc8e843dd642
6
+ metadata.gz: b8c6f697034dab771dec9391aba56c647631f96f942165adae988803f74c59a7dca7515360349d0193f0d66a60f8fc9d19da1288613562de8b13b6f23b329961
7
+ data.tar.gz: ed6feff242aedac8add87e36d0863f34e3d6dcc00405f0a98dc6cb803b3d75451f228839e2cff251b5d9a58d0fa1b019e55f73d5d2689f957e11a4d517843389
@@ -25,6 +25,11 @@ module Goldiloader
25
25
  @auto_include_context = nil
26
26
  super
27
27
  end
28
+
29
+ def goldiload(cache_name = nil, key: self.class.primary_key, &block)
30
+ cache_name ||= block.source_location.join(':')
31
+ auto_include_context.preloaded(self, cache_name: cache_name, key: key, &block)
32
+ end
28
33
  end
29
34
  ::ActiveRecord::Base.include(::Goldiloader::BasePatch)
30
35
 
@@ -114,8 +119,7 @@ module Goldiloader
114
119
  private
115
120
 
116
121
  def eager_loadable?
117
- klass && reflection.eager_loadable?(klass) &&
118
- (::Goldiloader::Compatibility.destroyed_model_associations_eager_loadable? || !owner.destroyed?)
122
+ klass && reflection.eager_loadable?(klass)
119
123
  end
120
124
 
121
125
  def load_with_auto_include
@@ -51,5 +51,7 @@ module Goldiloader
51
51
  end
52
52
 
53
53
  alias_method :register_model, :register_models
54
+
55
+ prepend Goldiloader::CustomPreloads
54
56
  end
55
57
  end
@@ -3,16 +3,11 @@
3
3
  module Goldiloader
4
4
  module Compatibility
5
5
  ACTIVE_RECORD_VERSION = ::Gem::Version.new(::ActiveRecord::VERSION::STRING).release
6
- RAILS_5_2_0 = ACTIVE_RECORD_VERSION == ::Gem::Version.new('5.2.0')
7
6
 
8
7
  def self.pre_rails_7?
9
8
  ::ActiveRecord::VERSION::MAJOR < 7
10
9
  end
11
10
 
12
- def self.rails_5_2?
13
- ::ActiveRecord::VERSION::MAJOR == 5 && ::ActiveRecord::VERSION::MINOR == 2
14
- end
15
-
16
11
  def self.rails_6_1?
17
12
  ::ActiveRecord::VERSION::MAJOR == 6 && ::ActiveRecord::VERSION::MINOR == 1
18
13
  end
@@ -20,10 +15,5 @@ module Goldiloader
20
15
  def self.rails_6_1_or_greater?
21
16
  ::ActiveRecord::VERSION::MAJOR > 6 || rails_6_1?
22
17
  end
23
-
24
- # See https://github.com/rails/rails/pull/32375
25
- def self.destroyed_model_associations_eager_loadable?
26
- !RAILS_5_2_0
27
- end
28
18
  end
29
19
  end
@@ -0,0 +1,42 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Goldiloader
4
+ module CustomPreloads
5
+ def initialize
6
+ super
7
+ @custom_preloads = nil
8
+ end
9
+
10
+ def preloaded(model, cache_name:, key:, &block)
11
+ unless preloaded?(cache_name)
12
+ ids = models.map do |record|
13
+ record.public_send(key)
14
+ end
15
+
16
+ # We're using instance_exec instead of a simple yield to make sure that the
17
+ # given block does not have any references to the model instance as this might
18
+ # lead to unexpected results. The block will be executed in the context of the
19
+ # class of the model instead.
20
+ block_context = models.first.class
21
+ preloaded_hash = block_context.instance_exec(ids, &block)
22
+ store_preloaded(cache_name, preloaded_hash)
23
+ end
24
+ fetch_preloaded(cache_name, model, key: key)
25
+ end
26
+
27
+ private
28
+
29
+ def store_preloaded(cache_name, preloaded_hash)
30
+ @custom_preloads ||= {}
31
+ @custom_preloads[cache_name] = preloaded_hash
32
+ end
33
+
34
+ def fetch_preloaded(cache_name, instance, key:)
35
+ @custom_preloads&.dig(cache_name, instance.public_send(key))
36
+ end
37
+
38
+ def preloaded?(cache_name)
39
+ @custom_preloads&.key?(cache_name)
40
+ end
41
+ end
42
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Goldiloader
4
- VERSION = '4.2.0'
4
+ VERSION = '5.1.0'
5
5
  end
data/lib/goldiloader.rb CHANGED
@@ -3,6 +3,7 @@
3
3
  require 'active_support/all'
4
4
  require 'active_record'
5
5
  require 'goldiloader/compatibility'
6
+ require 'goldiloader/custom_preloads'
6
7
  require 'goldiloader/auto_include_context'
7
8
  require 'goldiloader/scope_info'
8
9
  require 'goldiloader/association_options'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: goldiloader
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.2.0
4
+ version: 5.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Joel Turkel
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-01-14 00:00:00.000000000 Z
11
+ date: 2023-11-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -16,7 +16,7 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '5.2'
19
+ version: '6.1'
20
20
  - - "<"
21
21
  - !ruby/object:Gem::Version
22
22
  version: '7.2'
@@ -26,7 +26,7 @@ dependencies:
26
26
  requirements:
27
27
  - - ">="
28
28
  - !ruby/object:Gem::Version
29
- version: '5.2'
29
+ version: '6.1'
30
30
  - - "<"
31
31
  - !ruby/object:Gem::Version
32
32
  version: '7.2'
@@ -36,7 +36,7 @@ dependencies:
36
36
  requirements:
37
37
  - - ">="
38
38
  - !ruby/object:Gem::Version
39
- version: '5.2'
39
+ version: '6.1'
40
40
  - - "<"
41
41
  - !ruby/object:Gem::Version
42
42
  version: '7.2'
@@ -46,32 +46,26 @@ dependencies:
46
46
  requirements:
47
47
  - - ">="
48
48
  - !ruby/object:Gem::Version
49
- version: '5.2'
49
+ version: '6.1'
50
50
  - - "<"
51
51
  - !ruby/object:Gem::Version
52
52
  version: '7.2'
53
53
  - !ruby/object:Gem::Dependency
54
- name: activestorage
54
+ name: appraisal
55
55
  requirement: !ruby/object:Gem::Requirement
56
56
  requirements:
57
57
  - - ">="
58
58
  - !ruby/object:Gem::Version
59
- version: '5.2'
60
- - - "<"
61
- - !ruby/object:Gem::Version
62
- version: '7.2'
59
+ version: '0'
63
60
  type: :development
64
61
  prerelease: false
65
62
  version_requirements: !ruby/object:Gem::Requirement
66
63
  requirements:
67
64
  - - ">="
68
65
  - !ruby/object:Gem::Version
69
- version: '5.2'
70
- - - "<"
71
- - !ruby/object:Gem::Version
72
- version: '7.2'
66
+ version: '0'
73
67
  - !ruby/object:Gem::Dependency
74
- name: appraisal
68
+ name: benchmark-ips
75
69
  requirement: !ruby/object:Gem::Requirement
76
70
  requirements:
77
71
  - - ">="
@@ -85,19 +79,19 @@ dependencies:
85
79
  - !ruby/object:Gem::Version
86
80
  version: '0'
87
81
  - !ruby/object:Gem::Dependency
88
- name: benchmark-ips
82
+ name: combustion
89
83
  requirement: !ruby/object:Gem::Requirement
90
84
  requirements:
91
- - - ">="
85
+ - - "~>"
92
86
  - !ruby/object:Gem::Version
93
- version: '0'
87
+ version: '1.3'
94
88
  type: :development
95
89
  prerelease: false
96
90
  version_requirements: !ruby/object:Gem::Requirement
97
91
  requirements:
98
- - - ">="
92
+ - - "~>"
99
93
  - !ruby/object:Gem::Version
100
- version: '0'
94
+ version: '1.3'
101
95
  - !ruby/object:Gem::Dependency
102
96
  name: coveralls_reborn
103
97
  requirement: !ruby/object:Gem::Requirement
@@ -113,21 +107,27 @@ dependencies:
113
107
  - !ruby/object:Gem::Version
114
108
  version: 0.18.0
115
109
  - !ruby/object:Gem::Dependency
116
- name: database_cleaner
110
+ name: rails
117
111
  requirement: !ruby/object:Gem::Requirement
118
112
  requirements:
119
113
  - - ">="
120
114
  - !ruby/object:Gem::Version
121
- version: '1.2'
115
+ version: '6.1'
116
+ - - "<"
117
+ - !ruby/object:Gem::Version
118
+ version: '7.2'
122
119
  type: :development
123
120
  prerelease: false
124
121
  version_requirements: !ruby/object:Gem::Requirement
125
122
  requirements:
126
123
  - - ">="
127
124
  - !ruby/object:Gem::Version
128
- version: '1.2'
125
+ version: '6.1'
126
+ - - "<"
127
+ - !ruby/object:Gem::Version
128
+ version: '7.2'
129
129
  - !ruby/object:Gem::Dependency
130
- name: mime-types
130
+ name: rake
131
131
  requirement: !ruby/object:Gem::Requirement
132
132
  requirements:
133
133
  - - ">="
@@ -141,35 +141,35 @@ dependencies:
141
141
  - !ruby/object:Gem::Version
142
142
  version: '0'
143
143
  - !ruby/object:Gem::Dependency
144
- name: rake
144
+ name: rspec
145
145
  requirement: !ruby/object:Gem::Requirement
146
146
  requirements:
147
- - - ">="
147
+ - - "~>"
148
148
  - !ruby/object:Gem::Version
149
- version: '0'
149
+ version: '3'
150
150
  type: :development
151
151
  prerelease: false
152
152
  version_requirements: !ruby/object:Gem::Requirement
153
153
  requirements:
154
- - - ">="
154
+ - - "~>"
155
155
  - !ruby/object:Gem::Version
156
- version: '0'
156
+ version: '3'
157
157
  - !ruby/object:Gem::Dependency
158
- name: rspec
158
+ name: rspec_junit_formatter
159
159
  requirement: !ruby/object:Gem::Requirement
160
160
  requirements:
161
- - - "~>"
161
+ - - ">="
162
162
  - !ruby/object:Gem::Version
163
- version: '3'
163
+ version: '0'
164
164
  type: :development
165
165
  prerelease: false
166
166
  version_requirements: !ruby/object:Gem::Requirement
167
167
  requirements:
168
- - - "~>"
168
+ - - ">="
169
169
  - !ruby/object:Gem::Version
170
- version: '3'
170
+ version: '0'
171
171
  - !ruby/object:Gem::Dependency
172
- name: rspec_junit_formatter
172
+ name: rspec-rails
173
173
  requirement: !ruby/object:Gem::Requirement
174
174
  requirements:
175
175
  - - ">="
@@ -214,16 +214,16 @@ dependencies:
214
214
  name: sqlite3
215
215
  requirement: !ruby/object:Gem::Requirement
216
216
  requirements:
217
- - - "~>"
217
+ - - ">="
218
218
  - !ruby/object:Gem::Version
219
- version: '1.3'
219
+ version: '0'
220
220
  type: :development
221
221
  prerelease: false
222
222
  version_requirements: !ruby/object:Gem::Requirement
223
223
  requirements:
224
- - - "~>"
224
+ - - ">="
225
225
  - !ruby/object:Gem::Version
226
- version: '1.3'
226
+ version: '0'
227
227
  description: Automatically eager loads Rails associations as associations are traversed
228
228
  email:
229
229
  - jturkel@salsify.com
@@ -238,6 +238,7 @@ files:
238
238
  - lib/goldiloader/association_options.rb
239
239
  - lib/goldiloader/auto_include_context.rb
240
240
  - lib/goldiloader/compatibility.rb
241
+ - lib/goldiloader/custom_preloads.rb
241
242
  - lib/goldiloader/scope_info.rb
242
243
  - lib/goldiloader/version.rb
243
244
  homepage: https://github.com/salsify/goldiloader
@@ -258,14 +259,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
258
259
  requirements:
259
260
  - - ">="
260
261
  - !ruby/object:Gem::Version
261
- version: '2.6'
262
+ version: '3.0'
262
263
  required_rubygems_version: !ruby/object:Gem::Requirement
263
264
  requirements:
264
265
  - - ">="
265
266
  - !ruby/object:Gem::Version
266
267
  version: '0'
267
268
  requirements: []
268
- rubygems_version: 3.2.22
269
+ rubygems_version: 3.3.26
269
270
  signing_key:
270
271
  specification_version: 4
271
272
  summary: Automatic Rails association eager loading