graphiti 1.0.alpha.12 → 1.0.alpha.14

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
  SHA1:
3
- metadata.gz: 5ce517d6401bea528533904e46403edc173ff484
4
- data.tar.gz: 2dbb938df50136bcd97d3cab586252c4789e10d4
3
+ metadata.gz: b5ea1fc71cafab76e9d9978a65d0db8c9e947609
4
+ data.tar.gz: f09f4fbb1322c7da9a07c9ba0e96d9906a586b7f
5
5
  SHA512:
6
- metadata.gz: 62550f735f9afc8bfcb68261e9a671c8f066245f15931ecbc2497fbe317ec720b6898aa1784daa01c7aed03f39565183c07f43c14d7cd5f0fe4d777e08137ebb
7
- data.tar.gz: b006db1dd79aa9f3541ab1a6960468c919d19378b9ff330cbd565c4714bd4d290b0b86778e0f94b51e2101108ad85bda12f80e7ed45576c9b8208286264ad866
6
+ metadata.gz: bf4c9ddbd38979ec78ee272629304cc725a9ab2f634e8864f3cd146b9101a2b704ac55299033360fe92a1153a79e963f199256a2306ff60bd2b418fa50325509
7
+ data.tar.gz: c42eb4d69df9c79c9bf54b1fb71bf71c6c531ce687c84fa5967a9bc0e736fb1a2130ad364ffca4aeb9f02da3ed42dd406413db514f97b13a6bfa2b8bfce874b2
@@ -166,18 +166,28 @@ module Graphiti
166
166
  end
167
167
 
168
168
  def assign(parents, children)
169
- associated = []
169
+ track_associated = type == :has_one
170
+ associated = [] if track_associated
171
+ if performant_assign?
172
+ map = child_map(children)
173
+ end
174
+
170
175
  parents.each do |parent|
171
- relevant_children = fire_assign_each(parent, children)
176
+ if performant_assign?
177
+ relevant_children = children_for(parent, map) || []
178
+ else
179
+ relevant_children = fire_assign_each(parent, children)
180
+ end
181
+
172
182
  if relevant_children.is_a?(Array)
173
- associated |= relevant_children
174
- associate_all(parent, relevant_children)
183
+ associated |= relevant_children if track_associated
184
+ associate_all(parent, relevant_children)
175
185
  else
176
- associated << relevant_children if relevant_children
186
+ associated << relevant_children if track_associated && relevant_children
177
187
  associate(parent, relevant_children)
178
188
  end
179
189
  end
180
- children.replace(associated)
190
+ children.replace(associated) if track_associated
181
191
  end
182
192
 
183
193
  def resolve(parents, query)
@@ -246,6 +256,10 @@ module Graphiti
246
256
  parent_ids
247
257
  end
248
258
 
259
+ def performant_assign?
260
+ !self.class.assign_each_proc
261
+ end
262
+
249
263
  private
250
264
 
251
265
  def load_options(parents, query)
@@ -23,11 +23,6 @@ class Graphiti::Sideload::BelongsTo < Graphiti::Sideload
23
23
  { primary_key => parent_ids.join(',') }
24
24
  end
25
25
 
26
- def assign_each(parent, children)
27
- children_hash = children.index_by(&primary_key)
28
- children_hash[parent.send(foreign_key)]
29
- end
30
-
31
26
  def ids_for_parents(parents)
32
27
  parent_ids = parents.map(&foreign_key)
33
28
  parent_ids.compact!
@@ -45,4 +40,14 @@ class Graphiti::Sideload::BelongsTo < Graphiti::Sideload
45
40
  :"#{model_name.underscore}_id"
46
41
  end
47
42
  end
43
+
44
+ private
45
+
46
+ def child_map(children)
47
+ children.index_by(&primary_key)
48
+ end
49
+
50
+ def children_for(parent, map)
51
+ map[parent.send(foreign_key)]
52
+ end
48
53
  end
@@ -14,8 +14,13 @@ class Graphiti::Sideload::HasMany < Graphiti::Sideload
14
14
  { foreign_key => ids_for_parents(parents).join(',') }
15
15
  end
16
16
 
17
- def assign_each(parent, children)
18
- children_hash = children.group_by(&foreign_key)
19
- children_hash[parent.send(primary_key)] || []
17
+ private
18
+
19
+ def child_map(children)
20
+ children.group_by(&foreign_key)
21
+ end
22
+
23
+ def children_for(parent, map)
24
+ map[parent.send(primary_key)] || []
20
25
  end
21
26
  end
@@ -3,9 +3,9 @@ class Graphiti::Sideload::HasOne < Graphiti::Sideload::HasMany
3
3
  :has_one
4
4
  end
5
5
 
6
- def assign_each(parent, children)
7
- children_hash = children.group_by(&foreign_key)
8
- result = children_hash[parent.send(primary_key)] || []
9
- result[0]
6
+ private
7
+
8
+ def children_for(parent, map)
9
+ super[0]
10
10
  end
11
11
  end
@@ -19,6 +19,10 @@ class Graphiti::Sideload::ManyToMany < Graphiti::Sideload::HasMany
19
19
  raise 'You must explicitly pass :foreign_key for many-to-many relationships, or override in subclass to return a hash.'
20
20
  end
21
21
 
22
+ def performant_assign?
23
+ false
24
+ end
25
+
22
26
  def assign_each(parent, children)
23
27
  children.select do |c|
24
28
  match = ->(ct) { ct.send(true_foreign_key) == parent.send(primary_key) }
@@ -1,3 +1,3 @@
1
1
  module Graphiti
2
- VERSION = "1.0.alpha.12"
2
+ VERSION = "1.0.alpha.14"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: graphiti
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.alpha.12
4
+ version: 1.0.alpha.14
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lee Richmond
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2018-08-28 00:00:00.000000000 Z
11
+ date: 2018-08-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: jsonapi-serializable