hq-graphql 2.0.10 → 2.0.11
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/hq/graphql.rb +1 -1
- data/lib/hq/graphql/association_loader.rb +49 -0
- data/lib/hq/graphql/field.rb +1 -1
- data/lib/hq/graphql/version.rb +1 -1
- metadata +3 -4
- data/lib/hq/graphql/loaders.rb +0 -3
- data/lib/hq/graphql/loaders/association.rb +0 -51
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 40c69615fc4b2b0d14d3c510d5c4973aa5a0f7bf0285278ca98505af62d73fb0
|
4
|
+
data.tar.gz: 4f0926421e6e2f8658f9e6aaf0234756eaf66c6dbf126210f56a92f0d4701a8a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 945bad36e906b28a2c1444f7e87df594c306b817c61f3bdfa1176f061c645904e9206f663fe82861b0a44ee61c881d8899d6979dc57842b1920070d6a48fa6ff
|
7
|
+
data.tar.gz: 82cf817c3d801273c0cc4a099aa513585ba96220fc9b9ce84f996bd14cbe04d248a8d759d864fc964d7f07571bb11169c59cf670d7893ce1ea860a4d41dd86d8
|
data/lib/hq/graphql.rb
CHANGED
@@ -59,12 +59,12 @@ module HQ
|
|
59
59
|
end
|
60
60
|
|
61
61
|
require "hq/graphql/active_record_extensions"
|
62
|
+
require "hq/graphql/association_loader"
|
62
63
|
require "hq/graphql/scalars"
|
63
64
|
require "hq/graphql/comparator"
|
64
65
|
require "hq/graphql/enum"
|
65
66
|
require "hq/graphql/inputs"
|
66
67
|
require "hq/graphql/input_object"
|
67
|
-
require "hq/graphql/loaders"
|
68
68
|
require "hq/graphql/mutation"
|
69
69
|
require "hq/graphql/object"
|
70
70
|
require "hq/graphql/resource"
|
@@ -0,0 +1,49 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module HQ
|
4
|
+
module GraphQL
|
5
|
+
class AssociationLoader < ::GraphQL::Batch::Loader
|
6
|
+
def initialize(model, association_name)
|
7
|
+
@model = model
|
8
|
+
@association_name = association_name
|
9
|
+
validate
|
10
|
+
end
|
11
|
+
|
12
|
+
def load(record)
|
13
|
+
raise TypeError, "#{@model} loader can't load association for #{record.class}" unless record.is_a?(@model)
|
14
|
+
return Promise.resolve(read_association(record)) if association_loaded?(record)
|
15
|
+
super
|
16
|
+
end
|
17
|
+
|
18
|
+
# We want to load the associations on all records, even if they have the same id
|
19
|
+
def cache_key(record)
|
20
|
+
record.object_id
|
21
|
+
end
|
22
|
+
|
23
|
+
def perform(records)
|
24
|
+
preload_association(records)
|
25
|
+
records.each { |record| fulfill(record, read_association(record)) }
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
def validate
|
31
|
+
unless @model.reflect_on_association(@association_name)
|
32
|
+
raise ArgumentError, "No association #{@association_name} on #{@model}"
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def preload_association(records)
|
37
|
+
::ActiveRecord::Associations::Preloader.new.preload(records, @association_name)
|
38
|
+
end
|
39
|
+
|
40
|
+
def read_association(record)
|
41
|
+
record.public_send(@association_name)
|
42
|
+
end
|
43
|
+
|
44
|
+
def association_loaded?(record)
|
45
|
+
record.association(@association_name).loaded?
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
data/lib/hq/graphql/field.rb
CHANGED
@@ -20,7 +20,7 @@ module HQ
|
|
20
20
|
|
21
21
|
def resolve_field(object, args, ctx)
|
22
22
|
if klass.present? && !!::GraphQL::Batch::Executor.current && object.object
|
23
|
-
|
23
|
+
AssociationLoader.for(klass.constantize, original_name).load(object.object).then do
|
24
24
|
super
|
25
25
|
end
|
26
26
|
else
|
data/lib/hq/graphql/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hq-graphql
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.
|
4
|
+
version: 2.0.11
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Danny Jones
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-05-
|
11
|
+
date: 2020-05-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|
@@ -247,6 +247,7 @@ files:
|
|
247
247
|
- lib/hq-graphql.rb
|
248
248
|
- lib/hq/graphql.rb
|
249
249
|
- lib/hq/graphql/active_record_extensions.rb
|
250
|
+
- lib/hq/graphql/association_loader.rb
|
250
251
|
- lib/hq/graphql/comparator.rb
|
251
252
|
- lib/hq/graphql/config.rb
|
252
253
|
- lib/hq/graphql/engine.rb
|
@@ -254,8 +255,6 @@ files:
|
|
254
255
|
- lib/hq/graphql/field.rb
|
255
256
|
- lib/hq/graphql/input_object.rb
|
256
257
|
- lib/hq/graphql/inputs.rb
|
257
|
-
- lib/hq/graphql/loaders.rb
|
258
|
-
- lib/hq/graphql/loaders/association.rb
|
259
258
|
- lib/hq/graphql/mutation.rb
|
260
259
|
- lib/hq/graphql/object.rb
|
261
260
|
- lib/hq/graphql/resource.rb
|
data/lib/hq/graphql/loaders.rb
DELETED
@@ -1,51 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
module HQ
|
4
|
-
module GraphQL
|
5
|
-
module Loaders
|
6
|
-
class Association < ::GraphQL::Batch::Loader
|
7
|
-
def initialize(model, association_name)
|
8
|
-
@model = model
|
9
|
-
@association_name = association_name
|
10
|
-
validate
|
11
|
-
end
|
12
|
-
|
13
|
-
def load(record)
|
14
|
-
raise TypeError, "#{@model} loader can't load association for #{record.class}" unless record.is_a?(@model)
|
15
|
-
return Promise.resolve(read_association(record)) if association_loaded?(record)
|
16
|
-
super
|
17
|
-
end
|
18
|
-
|
19
|
-
# We want to load the associations on all records, even if they have the same id
|
20
|
-
def cache_key(record)
|
21
|
-
record.object_id
|
22
|
-
end
|
23
|
-
|
24
|
-
def perform(records)
|
25
|
-
preload_association(records)
|
26
|
-
records.each { |record| fulfill(record, read_association(record)) }
|
27
|
-
end
|
28
|
-
|
29
|
-
private
|
30
|
-
|
31
|
-
def validate
|
32
|
-
unless @model.reflect_on_association(@association_name)
|
33
|
-
raise ArgumentError, "No association #{@association_name} on #{@model}"
|
34
|
-
end
|
35
|
-
end
|
36
|
-
|
37
|
-
def preload_association(records)
|
38
|
-
::ActiveRecord::Associations::Preloader.new.preload(records, @association_name)
|
39
|
-
end
|
40
|
-
|
41
|
-
def read_association(record)
|
42
|
-
record.public_send(@association_name)
|
43
|
-
end
|
44
|
-
|
45
|
-
def association_loaded?(record)
|
46
|
-
record.association(@association_name).loaded?
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|