fume-aloader 0.1.2 → 0.1.5

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: 221e8b06fc2100e3c646ab82f32c36e527e018bc7a9873fea4c181278af483bb
4
- data.tar.gz: 2c5c8fee904a1f32e0b3b7f55512742ddbf2dac5c427d3779142243b0d8b135d
3
+ metadata.gz: c8eda2429fb44edfe0b79564fff46b5da2141ec5ba0576fbb5fe02abd173c230
4
+ data.tar.gz: 2e00e7e678f27454a754a621bd82427a89449f6707161a6623f40dc6d00613fc
5
5
  SHA512:
6
- metadata.gz: 2dff7bb5abe0b7718f322efd12c965c1806e99875c71758893dc66010a3c81538ee8f4ad9becd714bf08bb1fa1dc6430c5afbb0d91862119caf850d056173b7c
7
- data.tar.gz: 3a59ef0c3ae2867a8480edaa84100cf2eaec0f8e8212152b1b79377bf0f8a9c784783fa655d590d9de410d641b993acb964170354b1a0d5538425def5052cea4
6
+ metadata.gz: e345b5a434ae6428b6ba81a67c1d0ecc149d19ed50e79b882919d726d6ab700d8bd9733a1f742f22df32cdcc276f056bb295d8373460c2d839a037e4b7f948e9
7
+ data.tar.gz: cd6fea905d1d95fde882b7f0ff2d75c0bc6eccddc2974b1028ca35bb8bbcf10b2a1704059d217f693cae3a1c75a73e6a20659346a0df442722c40319a78ce69a
@@ -10,15 +10,22 @@ module Fume::Aloader
10
10
  attr_accessor :cached_values
11
11
  attr_accessor :preload_values
12
12
 
13
- def initialize(records, klass = nil, &block)
14
- self.profile = :default
13
+ def initialize(records, options = {}, &block)
14
+ self.profile = options[:preset] || :default
15
15
  self.presets = {}
16
- self.klass = klass || records.klass
16
+ self.klass = options[:klass] || records.klass
17
17
 
18
18
  self.cached_values = {}
19
19
  self.preload_values = {}
20
20
  self.records = records
21
+
21
22
  instance_exec(&block) if block
23
+
24
+ if options[:inject]
25
+ self.records.each do |record|
26
+ record.aloader = self
27
+ end
28
+ end
22
29
  end
23
30
 
24
31
  def find_cached_value(record, name)
@@ -44,7 +51,7 @@ module Fume::Aloader
44
51
  relationship = Relationship.build(klass, name)
45
52
  return if relationship.loader_is_inited?(record)
46
53
 
47
- options = active_preset[:attributes][name] || {}
54
+ options = active_preset.dig(:attributes, name) || {}
48
55
  loaders = relationship.loaders_init(self.records, options[:preset])
49
56
  (self.preload_values[name] || []).each do |args|
50
57
  loaders.each { |it| it.preload_all(*args) }
@@ -196,8 +203,7 @@ module Fume::Aloader
196
203
  return attribute[:scope_includes] || [] if attr_preset_name.nil?
197
204
 
198
205
  association_klass ||= klass.new.association(name).reflection.klass
199
- loader = association_klass.al_build([])
200
- loader.active(attr_preset_name)
206
+ loader = association_klass.al_build([], preset: attr_preset_name)
201
207
  loader.build_profile_scope_includes
202
208
  end
203
209
 
@@ -9,6 +9,11 @@ module Fume::Aloader
9
9
  initializer 'fume-aloader.configure_rails_initialization' do |app|
10
10
  ::ActiveRecord::Base.include(RecordAddons)
11
11
  ::ActiveRecord::Relation.prepend(RelationAddons)
12
+
13
+ # CollectionProxy is inhert from Relation, proxy back to Relation
14
+ ::ActiveRecord::Associations::CollectionProxy.class_eval do
15
+ delegate :al_to_scope, :aloader, to: :scope
16
+ end
12
17
  end
13
18
  end
14
19
  end
@@ -20,11 +20,18 @@ module Fume::Aloader
20
20
  end
21
21
  end
22
22
 
23
+ def al_build(preset = :default)
24
+ return self.aloader if self.aloader
25
+ self.aloader = self.class.al_build([ self ], preset: preset)
26
+ end
27
+
23
28
  module ClassMethods
24
29
  def aloader_init(&block)
25
- define_singleton_method :al_build do |records|
30
+ define_singleton_method :al_build do |records, options = {}|
26
31
  dsl = DSL.new(&block)
27
- dsl.apply_config(AssociationLoader.new(records, self))
32
+ loader = dsl.apply_config(AssociationLoader.new(records, { klass: self }.merge(options)))
33
+
34
+ loader
28
35
  end
29
36
  end
30
37
  end
@@ -1,6 +1,5 @@
1
1
  module Fume::Aloader
2
2
  module RelationAddons
3
-
4
3
  attr_accessor :aloader
5
4
 
6
5
  def load(*args, &block)
@@ -11,7 +10,7 @@ module Fume::Aloader
11
10
  end
12
11
 
13
12
  def spawn(*args)
14
- result = super
13
+ result = already_in_scope? ? klass.all : clone
15
14
  result.aloader = nil
16
15
  result.al_init_loader
17
16
  result.aloader&.spawn_from(self.aloader) if self.aloader
@@ -49,7 +48,8 @@ module Fume::Aloader
49
48
  def al_to_scope(preset = :default)
50
49
  al_init_loader
51
50
  self.aloader.active(preset)
52
- self.aloader.apply_profile_scope_includes(self)
51
+ result = self.aloader.apply_profile_scope_includes(self)
52
+ result
53
53
  end
54
54
  end
55
55
  end
@@ -11,13 +11,8 @@ module Fume::Aloader
11
11
  def loaders_init(parents, preset)
12
12
  values = parents.map { |it| it.send(reflection.name) }.compact
13
13
  return [] if !reflection.klass.respond_to?(:al_build)
14
- loader = reflection.klass.al_build(values)
14
+ loader = reflection.klass.al_build(values, preset: preset, inject: true)
15
15
 
16
- values.each do |value|
17
- value.aloader = loader
18
- end
19
-
20
- loader.active(preset) if preset
21
16
  [ loader ]
22
17
  end
23
18
  end
@@ -59,13 +59,8 @@ module Fume::Aloader
59
59
  values_mapping.each do |type, values|
60
60
  loader_klass = type.constantize
61
61
  next if !loader_klass.respond_to?(:al_build)
62
- loader = loader_klass.al_build(values)
62
+ loader = loader_klass.al_build(values, preset: preset, inject: true)
63
63
 
64
- values.each do |value|
65
- value.aloader = loader
66
- end
67
-
68
- loader.active(preset) if preset
69
64
  loader
70
65
  end
71
66
  end
@@ -22,13 +22,8 @@ module Fume::Aloader
22
22
  def loaders_init(parents, preset)
23
23
  values = parents.flat_map { |it| it.send(reflection.name) }.compact
24
24
  return [] if !reflection.klass.respond_to?(:al_build)
25
- loader = reflection.klass.al_build(values)
25
+ loader = reflection.klass.al_build(values, preset: preset, inject: true)
26
26
 
27
- values.each do |value|
28
- value.aloader = loader
29
- end
30
-
31
- loader.active(preset) if preset
32
27
  [ loader ]
33
28
  end
34
29
  end
@@ -1,5 +1,5 @@
1
1
  module Fume
2
2
  module Aloader
3
- VERSION = "0.1.2"
3
+ VERSION = "0.1.5"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fume-aloader
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - sunteya
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-05-07 00:00:00.000000000 Z
11
+ date: 2022-06-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -136,7 +136,7 @@ dependencies:
136
136
  - - "~>"
137
137
  - !ruby/object:Gem::Version
138
138
  version: 2.20.0
139
- description:
139
+ description:
140
140
  email:
141
141
  - sunteya@gmail.com
142
142
  executables: []
@@ -167,7 +167,7 @@ homepage: https://github.com/sunteya/fume-aloader
167
167
  licenses:
168
168
  - MIT
169
169
  metadata: {}
170
- post_install_message:
170
+ post_install_message:
171
171
  rdoc_options: []
172
172
  require_paths:
173
173
  - lib
@@ -183,7 +183,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
183
183
  version: '0'
184
184
  requirements: []
185
185
  rubygems_version: 3.1.6
186
- signing_key:
186
+ signing_key:
187
187
  specification_version: 4
188
188
  summary: a configurable eager loading plugin for rails
189
189
  test_files: []