graphql_java_gen 0.1.0 → 0.1.1
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/README.md +6 -11
- data/codegen/lib/graphql_java_gen.rb +35 -2
- data/codegen/lib/graphql_java_gen/templates/APISchema.java.erb +21 -31
- data/codegen/lib/graphql_java_gen/version.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: '09c51e3a3cd35736ed828139d47f92bb6386fbe1'
|
4
|
+
data.tar.gz: 5388a33adb2994b597b8fa9d380c519115363b93
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 858c440553a22269df660fdd3560e7d3940bf02357984d4bad1543e7913b1f5e1c3a192834e6dc2cd8b37471b102ae1baa6d15e95fc7aadfa1bbeac7e9c57fc9
|
7
|
+
data.tar.gz: 2dc257fbbdae8e1d84d0202605c279fbaea372129cb42cbce7cf6f783baa808bb0791ee5ff5bf532821a3f7c178ddfa9c02434279a3a8e3e6cd89bac6f21a829
|
data/README.md
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
# GraphQLJavaGen
|
2
|
+
[](https://travis-ci.org/Shopify/graphql_java_gen)
|
2
3
|
|
3
4
|
Generate code for a specific GraphQL schema that provides query
|
4
5
|
builders and response classes.
|
@@ -10,27 +11,21 @@ The code generator requires ruby version 2.1 or later.
|
|
10
11
|
It is recommended to use [bundler](http://bundler.io/) to install
|
11
12
|
the code generators ruby package.
|
12
13
|
|
13
|
-
Until this project is released, it is recommended to include it into
|
14
|
-
a project as a git submodule.
|
15
|
-
|
16
|
-
$ git submodule https://github.com/Shopify/graphql_java_gen.git
|
17
|
-
|
18
14
|
Add this line to your application's Gemfile:
|
19
15
|
|
20
16
|
```ruby
|
21
|
-
gem 'graphql_java_gen'
|
17
|
+
gem 'graphql_java_gen'
|
22
18
|
```
|
23
19
|
|
24
20
|
And then execute:
|
25
21
|
|
26
22
|
$ bundle
|
27
23
|
|
28
|
-
The generated code depends on the com.shopify.graphql.support
|
29
|
-
|
30
|
-
|
31
|
-
](https://docs.gradle.org/current/userguide/multi_project_builds.html)
|
24
|
+
The generated code depends on the com.shopify.graphql.support java
|
25
|
+
package. This can be added to a gradle project by adding the following
|
26
|
+
jCenter dependancy to you `build.gradle` file:
|
32
27
|
|
33
|
-
|
28
|
+
compile 'com.shopify.graphql.support:support:0.1.0'
|
34
29
|
|
35
30
|
## Usage
|
36
31
|
|
@@ -247,8 +247,9 @@ class GraphQLJavaGen
|
|
247
247
|
|
248
248
|
def java_implements(type)
|
249
249
|
return "implements #{type.name} " unless type.object?
|
250
|
-
|
251
|
-
"
|
250
|
+
interfaces = abstract_types.fetch(type.name)
|
251
|
+
return "" if interfaces.empty?
|
252
|
+
"implements #{interfaces.to_a.join(', ')} "
|
252
253
|
end
|
253
254
|
|
254
255
|
def java_annotations(field)
|
@@ -260,4 +261,36 @@ class GraphQLJavaGen
|
|
260
261
|
def type_names_set
|
261
262
|
@type_names_set ||= schema.types.map(&:name).to_set
|
262
263
|
end
|
264
|
+
|
265
|
+
def abstract_types
|
266
|
+
@abstract_types ||= schema.types.each_with_object({}) do |type, result|
|
267
|
+
case type.kind
|
268
|
+
when 'OBJECT'
|
269
|
+
result[type.name] ||= Set.new
|
270
|
+
when 'INTERFACE', 'UNION'
|
271
|
+
type.possible_types.each do |possible_type|
|
272
|
+
(result[possible_type.name] ||= Set.new).add(type.name)
|
273
|
+
end
|
274
|
+
end
|
275
|
+
end
|
276
|
+
end
|
277
|
+
|
278
|
+
def java_doc(element)
|
279
|
+
doc = ''
|
280
|
+
unless element.description.nil?
|
281
|
+
description = wrap_text(element.description, 100)
|
282
|
+
description = description.chomp("\n").gsub("\n", "\n* ")
|
283
|
+
doc << "/**\n"
|
284
|
+
doc << '* '
|
285
|
+
doc << description
|
286
|
+
doc << "\n*/"
|
287
|
+
end
|
288
|
+
doc
|
289
|
+
end
|
290
|
+
|
291
|
+
def wrap_text(text, col_width=80)
|
292
|
+
text.gsub!( /(\S{#{col_width}})(?=\S)/, '\1 ' )
|
293
|
+
text.gsub!( /(.{1,#{col_width}})(?:\s+|$)/, "\\1\n" )
|
294
|
+
text
|
295
|
+
end
|
263
296
|
end
|
@@ -23,7 +23,7 @@ import java.util.Map;
|
|
23
23
|
|
24
24
|
public class <%= schema_name %> {
|
25
25
|
<% [[:query, schema.query_root_name], [:mutation, schema.mutation_root_name]].each do |operation_type, root_name| %>
|
26
|
-
<% next unless
|
26
|
+
<% next unless root_name %>
|
27
27
|
public static <%= root_name %>Query <%= operation_type %>(<%= root_name %>QueryDefinition queryDef) {
|
28
28
|
StringBuilder queryString = new StringBuilder("<%= operation_type unless operation_type == :query %>{");
|
29
29
|
<%= root_name %>Query query = new <%= root_name %>Query(queryString);
|
@@ -67,10 +67,12 @@ public class <%= schema_name %> {
|
|
67
67
|
|
68
68
|
<% schema.types.reject{ |type| type.name.start_with?('__') || type.scalar? }.each do |type| %>
|
69
69
|
<% case type.kind when 'OBJECT', 'INTERFACE', 'UNION' %>
|
70
|
+
<% fields = type.fields || [] %>
|
70
71
|
public interface <%= type.name %>QueryDefinition {
|
71
72
|
void define(<%= type.name %>Query _queryBuilder);
|
72
73
|
}
|
73
74
|
|
75
|
+
<%= java_doc(type) %>
|
74
76
|
public static class <%= type.name %>Query extends Query<<%= type.name %>Query> {
|
75
77
|
<%= type.name %>Query(StringBuilder _queryBuilder) {
|
76
78
|
super(_queryBuilder);
|
@@ -82,7 +84,7 @@ public class <%= schema_name %> {
|
|
82
84
|
<% end %>
|
83
85
|
}
|
84
86
|
|
85
|
-
<%
|
87
|
+
<% fields.each do |field| %>
|
86
88
|
<% next if field.name == "id" && type.object? && type.implement?("Node") %>
|
87
89
|
<% unless field.optional_args.empty? %>
|
88
90
|
public class <%= field.classify_name %>Arguments extends Arguments {
|
@@ -91,6 +93,7 @@ public class <%= schema_name %> {
|
|
91
93
|
}
|
92
94
|
|
93
95
|
<% field.optional_args.each do |arg| %>
|
96
|
+
<%= java_doc(arg) %>
|
94
97
|
public <%= field.classify_name %>Arguments <%= escape_reserved_word(arg.camelize_name) %>(<%= java_input_type(arg.type) %> value) {
|
95
98
|
if (value != null) {
|
96
99
|
startArgument("<%= arg.name %>");
|
@@ -105,11 +108,13 @@ public class <%= schema_name %> {
|
|
105
108
|
void define(<%= field.classify_name %>Arguments args);
|
106
109
|
}
|
107
110
|
|
111
|
+
<%= java_doc(field) %>
|
108
112
|
public <%= type.name %>Query <%= escape_reserved_word(field.camelize_name) %>(<%= java_arg_defs(field, skip_optional: true) %>) {
|
109
113
|
return <%= escape_reserved_word(field.camelize_name) %>(<%= java_arg_expresions_with_empty_optional_args(field) %>);
|
110
114
|
}
|
111
115
|
<% end %>
|
112
116
|
|
117
|
+
<%= java_doc(field) %>
|
113
118
|
public <%= type.name %>Query <%= escape_reserved_word(field.camelize_name) %>(<%= java_arg_defs(field) %>) {
|
114
119
|
startField("<%= field.name %>");
|
115
120
|
<% unless field.args.empty? %>
|
@@ -155,15 +160,20 @@ public class <%= schema_name %> {
|
|
155
160
|
}
|
156
161
|
|
157
162
|
<% unless type.object? %>
|
158
|
-
|
163
|
+
<% if type.name == 'Node' %>
|
164
|
+
public interface <%= type.name %> extends com.shopify.graphql.support.Node {
|
165
|
+
<% else %>
|
166
|
+
public interface <%= type.name %> {
|
167
|
+
<% end %>
|
159
168
|
String getGraphQlTypeName();
|
160
|
-
<%
|
169
|
+
<% fields.each do |field| %>
|
161
170
|
<%= java_output_type(field.type) %> get<%= field.classify_name %>();
|
162
171
|
<% end %>
|
163
172
|
}
|
164
173
|
<% end %>
|
165
174
|
|
166
175
|
<% class_name = type.object? ? type.name : "Unknown#{type.name}" %>
|
176
|
+
<%= java_doc(type) %>
|
167
177
|
public static class <%= class_name %> extends AbstractResponse<<%= class_name %>> <%= java_implements(type) %>{
|
168
178
|
public <%= class_name %>() {
|
169
179
|
}
|
@@ -173,7 +183,7 @@ public class <%= schema_name %> {
|
|
173
183
|
String key = field.getKey();
|
174
184
|
String fieldName = getFieldName(key);
|
175
185
|
switch (fieldName) {
|
176
|
-
<%
|
186
|
+
<% fields.each do |field| %>
|
177
187
|
case "<%= field.name %>": {
|
178
188
|
<% generate_build_output_code("field.getValue()", field.type) do |statements, expr| %>
|
179
189
|
<%= statements %>
|
@@ -200,28 +210,6 @@ public class <%= schema_name %> {
|
|
200
210
|
}
|
201
211
|
<% end %>
|
202
212
|
|
203
|
-
<% if type_names_set.include?('Node') %>
|
204
|
-
public List<Node> getNodes() {
|
205
|
-
List<Node> children = new ArrayList<>();
|
206
|
-
<% if type.object? && type.implement?("Node") %>
|
207
|
-
children.add(this);
|
208
|
-
<% end %>
|
209
|
-
<% type.fields.each do |field| %>
|
210
|
-
<% next unless field.type.unwrap.object? %>
|
211
|
-
if (get<%= field.classify_name %>() != null) {
|
212
|
-
<% if field.type.unwrap_non_null.kind == 'LIST' %>
|
213
|
-
for (<%= java_output_type(field.type.unwrap) %> elem: get<%= field.classify_name %>()) {
|
214
|
-
children.addAll(elem.getNodes());
|
215
|
-
}
|
216
|
-
<% else %>
|
217
|
-
children.addAll(get<%= field.classify_name %>().getNodes());
|
218
|
-
<% end %>
|
219
|
-
}
|
220
|
-
<% end %>
|
221
|
-
return children;
|
222
|
-
}
|
223
|
-
<% end %>
|
224
|
-
|
225
213
|
<% if type.object? %>
|
226
214
|
public String getGraphQlTypeName() {
|
227
215
|
return "<%= type.name %>";
|
@@ -246,7 +234,8 @@ public class <%= schema_name %> {
|
|
246
234
|
}
|
247
235
|
<% end %>
|
248
236
|
|
249
|
-
<%
|
237
|
+
<% fields.each do |field| %>
|
238
|
+
<%= java_doc(field) %>
|
250
239
|
<%= java_annotations(field) %>
|
251
240
|
public <%= java_output_type(field.type) %> get<%= field.classify_name %>() {
|
252
241
|
return (<%= java_output_type(field.type) %>) get("<%= field.name %>");
|
@@ -254,14 +243,14 @@ public class <%= schema_name %> {
|
|
254
243
|
|
255
244
|
<% next if field.name == "id" && type.object? && type.implement?("Node") %>
|
256
245
|
public <%= class_name %> set<%= field.classify_name %>(<%= java_output_type(field.type) %> arg) {
|
257
|
-
optimisticData.put("<%= field.name %>", arg);
|
246
|
+
optimisticData.put(getKey("<%= field.name %>"), arg);
|
258
247
|
return this;
|
259
248
|
}
|
260
249
|
<% end %>
|
261
250
|
|
262
251
|
public boolean unwrapsToObject(String key) {
|
263
|
-
switch (key) {
|
264
|
-
<%
|
252
|
+
switch (getFieldName(key)) {
|
253
|
+
<% fields.each do |field| %>
|
265
254
|
case "<%= field.name %>": return <%= field.type.unwrap.object? %>;
|
266
255
|
<% end %>
|
267
256
|
default: return false;
|
@@ -327,6 +316,7 @@ public class <%= schema_name %> {
|
|
327
316
|
}
|
328
317
|
}
|
329
318
|
<% when 'ENUM' %>
|
319
|
+
<%= java_doc(type) %>
|
330
320
|
public enum <%= type.name %> {
|
331
321
|
<% type.enum_values.each do |value| %>
|
332
322
|
<%= value.upcase_name %>,
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: graphql_java_gen
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dylan Thacker-Smith
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-10-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: graphql_schema
|
@@ -116,7 +116,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
116
116
|
version: '0'
|
117
117
|
requirements: []
|
118
118
|
rubyforge_project:
|
119
|
-
rubygems_version: 2.6.
|
119
|
+
rubygems_version: 2.6.14
|
120
120
|
signing_key:
|
121
121
|
specification_version: 4
|
122
122
|
summary: GraphQL java client code generator
|