hq-graphql 2.0.10 → 2.0.11
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 +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
|