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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 37dd12e8f71a2dd6fc03e26b5cf7fc355ffe2580
4
- data.tar.gz: 36b57f3175652ec1b06d8b18f67de4169e85720a
3
+ metadata.gz: e8a7ae35b0df182e490dd380acbc3f84fa80dfb6
4
+ data.tar.gz: da16677c177a2b9aaaa6a9723bc90763a774cbf5
5
5
  SHA512:
6
- metadata.gz: e5fb0eee1ff9fa5db33ca17a2a1457ba72f1191d57e1e9c6bd34f9a804ed5f0367e9bf94c217c4c290774f67bd27a54d0a9f760bd536605d668cfc8620b26468
7
- data.tar.gz: a5870bfd6ff935b7cfb27725fd3585d2253e9d81b2742435aa2c359befc5d39376bdac7d7e087731457ba1abe7aab7bbcdf442fc797a940e8e7b862cb10c3228
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
- includes_for_child(child_node, includes)
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
- includes_for_child(child_node, child_includes)
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
- includes_for_child(node_child_node, edge_node_includes)
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
- includes_for_child(edge_child_node, edges_includes)
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
- includes_for_child(node_child_node, nodes_includes)
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
- includes_for_child(node_child_node, edge_node_includes)
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
- includes_for_child(edge_child_node, edges_includes)
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
- includes_for_child(node_child_node, nodes_includes)
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
- includes_meta = node.definition.metadata[:new_includes]
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
- includes_meta = node.definition.metadata[:new_includes]
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.3
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-08-30 00:00:00.000000000 Z
13
+ date: 2019-09-03 00:00:00.000000000 Z
14
14
  dependencies: []
15
15
  description:
16
16
  email: