graphql_includable 0.5.0.beta.3 → 0.5.0.beta.4
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/graphql_includable/new/resolver.rb +43 -18
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e8a7ae35b0df182e490dd380acbc3f84fa80dfb6
|
4
|
+
data.tar.gz: da16677c177a2b9aaaa6a9723bc90763a774cbf5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 71bf2450237b9ea22c42dd5d1d6aea7850ac9712dfaa7e21f2bfd8831d407aaf32a8962a04d45618e06d3e971d9b44dbe9a0c38ad2590b5ed5f0dc082eb634cb
|
7
|
+
data.tar.gz: 9adc06e9202198ccf155f545556b865c73929cf4c7f464cb0d45e5ac1ca28f2fa1efc08250fb28d1172d2360c613e76bfbf339ac9cda3d654c4a9740761a68fe
|
@@ -16,16 +16,17 @@ module GraphQLIncludable
|
|
16
16
|
|
17
17
|
children = node.scoped_children[node.return_type.unwrap]
|
18
18
|
children.each_value do |child_node|
|
19
|
-
|
19
|
+
definition_override = node_definition_override(node, child_node)
|
20
|
+
includes_for_child(child_node, includes, definition_override)
|
20
21
|
end
|
21
22
|
end
|
22
23
|
|
23
24
|
private
|
24
25
|
|
25
|
-
def includes_for_child(node, includes)
|
26
|
-
return includes_for_connection(node, includes) if node.definition.connection?
|
26
|
+
def includes_for_child(node, includes, definition_override)
|
27
|
+
return includes_for_connection(node, includes, definition_override) if node.definition.connection?
|
27
28
|
|
28
|
-
builder = build_includes(node)
|
29
|
+
builder = build_includes(node, definition_override)
|
29
30
|
return unless builder.present?
|
30
31
|
includes.merge_includes(builder.includes) unless builder.includes.empty?
|
31
32
|
|
@@ -36,14 +37,15 @@ module GraphQLIncludable
|
|
36
37
|
|
37
38
|
children = node.scoped_children[node.return_type.unwrap]
|
38
39
|
children.each_value do |child_node|
|
39
|
-
|
40
|
+
definition_override = node_definition_override(node, child_node)
|
41
|
+
includes_for_child(child_node, child_includes, definition_override)
|
40
42
|
end
|
41
43
|
end
|
42
44
|
|
43
45
|
# rubocop:disable Metrics/AbcSize
|
44
46
|
# rubocop:disable Metrics/MethodLength
|
45
|
-
def includes_for_connection(node, includes)
|
46
|
-
builder = build_connection_includes(node)
|
47
|
+
def includes_for_connection(node, includes, definition_override)
|
48
|
+
builder = build_connection_includes(node, definition_override)
|
47
49
|
return unless builder&.includes?
|
48
50
|
|
49
51
|
connection_children = node.scoped_children[node.return_type.unwrap]
|
@@ -76,10 +78,12 @@ module GraphQLIncludable
|
|
76
78
|
|
77
79
|
node_children = edge_child_node.scoped_children[edge_child_node.return_type.unwrap]
|
78
80
|
node_children.each_value do |node_child_node|
|
79
|
-
|
81
|
+
definition_override = node_definition_override(edge_child_node, node_child_node)
|
82
|
+
includes_for_child(node_child_node, edge_node_includes, definition_override)
|
80
83
|
end
|
81
84
|
else
|
82
|
-
|
85
|
+
definition_override = node_definition_override(connection_node, edge_child_node)
|
86
|
+
includes_for_child(edge_child_node, edges_includes, definition_override)
|
83
87
|
end
|
84
88
|
end
|
85
89
|
elsif connection_node.name == 'nodes'
|
@@ -89,7 +93,8 @@ module GraphQLIncludable
|
|
89
93
|
|
90
94
|
node_children = connection_node.scoped_children[connection_node.return_type.unwrap]
|
91
95
|
node_children.each_value do |node_child_node|
|
92
|
-
|
96
|
+
definition_override = node_definition_override(connection_node, node_child_node)
|
97
|
+
includes_for_child(node_child_node, nodes_includes, definition_override)
|
93
98
|
end
|
94
99
|
elsif connection_node.name == 'totalCount'
|
95
100
|
# Handled using `.size`
|
@@ -105,7 +110,7 @@ module GraphQLIncludable
|
|
105
110
|
top_level_being_resolved = @root_ctx.namespace(:gql_includable)[:resolving]
|
106
111
|
|
107
112
|
if top_level_being_resolved == :edges
|
108
|
-
builder = build_connection_includes(node)
|
113
|
+
builder = build_connection_includes(node, nil)
|
109
114
|
return unless builder&.edges_builder&.node_builder&.includes?
|
110
115
|
|
111
116
|
edges_node = connection_children['edges']
|
@@ -120,10 +125,12 @@ module GraphQLIncludable
|
|
120
125
|
|
121
126
|
node_children = edge_child_node.scoped_children[edge_child_node.return_type.unwrap]
|
122
127
|
node_children.each_value do |node_child_node|
|
123
|
-
|
128
|
+
definition_override = node_definition_override(edge_child_node, node_child_node)
|
129
|
+
includes_for_child(node_child_node, edge_node_includes, definition_override)
|
124
130
|
end
|
125
131
|
else
|
126
|
-
|
132
|
+
definition_override = node_definition_override(edges_node, edge_child_node)
|
133
|
+
includes_for_child(edge_child_node, edges_includes, definition_override)
|
127
134
|
end
|
128
135
|
end
|
129
136
|
else
|
@@ -133,15 +140,17 @@ module GraphQLIncludable
|
|
133
140
|
|
134
141
|
node_children = nodes_node.scoped_children[nodes_node.return_type.unwrap]
|
135
142
|
node_children.each_value do |node_child_node|
|
136
|
-
|
143
|
+
definition_override = node_definition_override(nodes_node, node_child_node)
|
144
|
+
includes_for_child(node_child_node, nodes_includes, definition_override)
|
137
145
|
end
|
138
146
|
end
|
139
147
|
end
|
140
148
|
# rubocop:enable Metrics/MethodLength
|
141
149
|
# rubocop:enable Metrics/AbcSize
|
142
150
|
|
143
|
-
def build_includes(node)
|
144
|
-
|
151
|
+
def build_includes(node, definition_override)
|
152
|
+
definition = definition_override || node.definition
|
153
|
+
includes_meta = definition.metadata[:new_includes]
|
145
154
|
return nil if includes_meta.blank?
|
146
155
|
|
147
156
|
builder = GraphQLIncludable::New::IncludesBuilder.new
|
@@ -160,8 +169,9 @@ module GraphQLIncludable
|
|
160
169
|
builder
|
161
170
|
end
|
162
171
|
|
163
|
-
def build_connection_includes(node)
|
164
|
-
|
172
|
+
def build_connection_includes(node, definition_override)
|
173
|
+
definition = definition_override || node.definition
|
174
|
+
includes_meta = definition.metadata[:new_includes]
|
165
175
|
return nil if includes_meta.blank?
|
166
176
|
|
167
177
|
builder = GraphQLIncludable::New::ConnectionIncludesBuilder.new
|
@@ -173,6 +183,21 @@ module GraphQLIncludable
|
|
173
183
|
end
|
174
184
|
builder
|
175
185
|
end
|
186
|
+
|
187
|
+
def node_definition_override(parent_node, child_node)
|
188
|
+
node_return_type = parent_node.return_type.unwrap
|
189
|
+
child_node_parent_type = child_node.parent.return_type.unwrap
|
190
|
+
|
191
|
+
return nil unless child_node_parent_type != node_return_type
|
192
|
+
child_node_definition_override = nil
|
193
|
+
# Handle GraphQL interface with overridden fields
|
194
|
+
# GraphQL makes child_node.return_type the interface instance
|
195
|
+
# and therefore takes the metadata from the interface rather than the
|
196
|
+
# implementing object's overridden field instance
|
197
|
+
is_interface = node_return_type.interfaces.include?(child_node_parent_type)
|
198
|
+
child_node_definition_override = node_return_type.fields[child_node.name] if is_interface
|
199
|
+
child_node_definition_override
|
200
|
+
end
|
176
201
|
end
|
177
202
|
end
|
178
203
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: graphql_includable
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.0.beta.
|
4
|
+
version: 0.5.0.beta.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dan Rouse
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2019-
|
13
|
+
date: 2019-09-03 00:00:00.000000000 Z
|
14
14
|
dependencies: []
|
15
15
|
description:
|
16
16
|
email:
|