graphql_helper_generator 0.0.13 → 0.0.16
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/graphql_helper_generator-0.0.13.gem +0 -0
- data/graphql_helper_generator-0.0.14.gem +0 -0
- data/graphql_helper_generator-0.0.15.gem +0 -0
- data/lib/graphql_helper_generator/graphql_model/graphql_model_generator.rb +92 -50
- data/lib/graphql_helper_generator/graphql_model/templates/graphql_types/type_template.erb +0 -1
- data/lib/graphql_helper_generator/graphql_model/templates/tests/{create_test.erb → create_test_template.erb} +0 -0
- data/lib/graphql_helper_generator/graphql_model/templates/tests/delete_test_template.erb +39 -0
- data/lib/graphql_helper_generator/graphql_model/templates/tests/factory_template.erb +47 -0
- data/lib/graphql_helper_generator/graphql_model/templates/tests/update_test_template.erb +38 -0
- data/lib/graphql_helper_generator/version.rb +1 -1
- metadata +9 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: eef5c27cdba815948d10961fb689a49888e5efc5e7dbe507f93e48c43e2e01cc
|
4
|
+
data.tar.gz: 78ae76a82b62d38e4745366853c964b3b7bb15ffd0b349accf815dcb76d47eba
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: d9d12641f6f0b813de7f9b7825278486eeac12c9758e79e931152c21b65922a94562efe232cd3206c1607f7c385ce4690b0a399358754decc5169c75fcf7ab2f
|
7
|
+
data.tar.gz: db231acaf457e0f748d013bd6f9e2f8c27c740df566114f9a85f0e323fedf4d197e1e2382cd9befb98baf3f1d0164631d3f214f463e06fd348ae31dd4137c8ca
|
Binary file
|
Binary file
|
Binary file
|
@@ -20,7 +20,10 @@ class GraphqlModelGenerator < Rails::Generators::NamedBase
|
|
20
20
|
generate_create_mutation
|
21
21
|
generate_update_mutation
|
22
22
|
generate_delete_mutation
|
23
|
-
|
23
|
+
generate_factory
|
24
|
+
generate_create_test
|
25
|
+
generate_update_test
|
26
|
+
generate_delete_test
|
24
27
|
|
25
28
|
if options[:input_type].present? then generate_input_type end
|
26
29
|
|
@@ -46,14 +49,6 @@ class GraphqlModelGenerator < Rails::Generators::NamedBase
|
|
46
49
|
template "model_template.erb", dir
|
47
50
|
end
|
48
51
|
|
49
|
-
def generate_type
|
50
|
-
generate_create_mutation_lines
|
51
|
-
filename = "create_" + @snake_case_name + ".rb"
|
52
|
-
dir = "app/graphql/mutations/" + filename
|
53
|
-
|
54
|
-
template "create_mutation_template.erb", dir
|
55
|
-
end
|
56
|
-
|
57
52
|
def generate_type
|
58
53
|
generate_type_fields
|
59
54
|
filename = @snake_case_name + "_type.rb"
|
@@ -85,19 +80,46 @@ class GraphqlModelGenerator < Rails::Generators::NamedBase
|
|
85
80
|
template "mutations/delete_mutation_template.erb", dir
|
86
81
|
end
|
87
82
|
|
83
|
+
def generate_input_type
|
84
|
+
filename = @snake_case_name + "_input_type.rb"
|
85
|
+
dir = "app/graphql/types/inputs/" + filename
|
86
|
+
|
87
|
+
template "graphql_types/input_type_template.erb", dir
|
88
|
+
end
|
89
|
+
|
90
|
+
def generate_factory
|
91
|
+
len = @snake_case_name.length
|
92
|
+
if @snake_case_name[len] == 'y'
|
93
|
+
filename = @snake_case_name[0..-1] + "ies.rb"
|
94
|
+
else
|
95
|
+
filename = @snake_case_name + "s.rb"
|
96
|
+
end
|
97
|
+
dir = "spec/factories/" + filename
|
98
|
+
|
99
|
+
template "tests/factory_template.erb", dir
|
100
|
+
end
|
101
|
+
|
88
102
|
def generate_create_test
|
89
103
|
generate_create_test_lines
|
90
104
|
filename = "create_" + @snake_case_name + "_spec.rb"
|
91
105
|
dir = "spec/requests/" + filename
|
92
106
|
|
93
|
-
template "tests/
|
107
|
+
template "tests/create_test_template.erb", dir
|
94
108
|
end
|
95
109
|
|
96
|
-
def
|
97
|
-
|
98
|
-
|
110
|
+
def generate_update_test
|
111
|
+
generate_update_test_lines
|
112
|
+
filename = "update_" + @snake_case_name + "_spec.rb"
|
113
|
+
dir = "spec/requests/" + filename
|
99
114
|
|
100
|
-
template "
|
115
|
+
template "tests/update_test_template.erb", dir
|
116
|
+
end
|
117
|
+
|
118
|
+
def generate_delete_test
|
119
|
+
filename = "delete_" + @snake_case_name + "_spec.rb"
|
120
|
+
dir = "spec/requests/" + filename
|
121
|
+
|
122
|
+
template "tests/delete_test_template.erb", dir
|
101
123
|
end
|
102
124
|
|
103
125
|
def parse_variables
|
@@ -136,10 +158,44 @@ class GraphqlModelGenerator < Rails::Generators::NamedBase
|
|
136
158
|
str += type + ', required: false'
|
137
159
|
str
|
138
160
|
}
|
161
|
+
end
|
162
|
+
|
163
|
+
def generate_create_test_lines
|
164
|
+
@create_test_define_line =
|
165
|
+
@parsed_fields.filter{|f| !f[:reference].present? }.map{|field|
|
166
|
+
name = field[:name].camelize
|
167
|
+
name[0] = name[0].downcase
|
168
|
+
str = "$" + name + ": " + cast_to_graphql_input(field)
|
169
|
+
if field[:required].present? then str += "!" end
|
170
|
+
str
|
171
|
+
}.join(', ')
|
172
|
+
|
173
|
+
@create_test_input_line =
|
174
|
+
@parsed_fields.filter{|f| !f[:reference].present? }.map{|field|
|
175
|
+
name = field[:name].camelize
|
176
|
+
name[0] = name[0].downcase
|
177
|
+
str = name + ": " + "$" + name
|
178
|
+
}.join(', ')
|
179
|
+
end
|
139
180
|
|
140
|
-
|
181
|
+
def generate_update_test_lines
|
182
|
+
@update_test_define_line =
|
183
|
+
@parsed_fields.filter{|f| !f[:reference].present? }.map{|field|
|
184
|
+
name = field[:name].camelize
|
185
|
+
name[0] = name[0].downcase
|
186
|
+
str = "$" + name + ": " + cast_to_graphql_input(field)
|
187
|
+
str
|
188
|
+
}.join(', ')
|
189
|
+
|
190
|
+
@update_test_input_line =
|
191
|
+
@parsed_fields.filter{|f| !f[:reference].present? }.map{|field|
|
192
|
+
name = field[:name].camelize
|
193
|
+
name[0] = name[0].downcase
|
194
|
+
str = name + ": " + "$" + name
|
195
|
+
}.join(', ')
|
141
196
|
end
|
142
197
|
|
198
|
+
|
143
199
|
def generate_create_mutation_lines
|
144
200
|
@create_mutation_lines =
|
145
201
|
@parsed_fields.map{|field|
|
@@ -165,29 +221,6 @@ class GraphqlModelGenerator < Rails::Generators::NamedBase
|
|
165
221
|
end
|
166
222
|
str
|
167
223
|
}
|
168
|
-
|
169
|
-
# print_array(@create_mutation_lines, "CREATE mutation lines")
|
170
|
-
end
|
171
|
-
|
172
|
-
def generate_create_test_lines
|
173
|
-
@create_test_define_line =
|
174
|
-
@parsed_fields.filter{|f| !f[:reference].present? }.map{|field|
|
175
|
-
name = field[:name].camelize
|
176
|
-
name[0] = name[0].downcase
|
177
|
-
str = "$" + name + ": " + cast_to_graphql(field)
|
178
|
-
if field[:required].present? then str += "!" end
|
179
|
-
str
|
180
|
-
}.join(', ')
|
181
|
-
|
182
|
-
@create_test_input_line =
|
183
|
-
@parsed_fields.filter{|f| !f[:reference].present? }.map{|field|
|
184
|
-
name = field[:name].camelize
|
185
|
-
name[0] = name[0].downcase
|
186
|
-
str = name + ": " + "$" + name
|
187
|
-
}.join(', ')
|
188
|
-
|
189
|
-
puts @create_test_define_line + " <<<< DEFINE"
|
190
|
-
puts @create_test_input_line + " <<<< INPUT"
|
191
224
|
end
|
192
225
|
|
193
226
|
def generate_type_fields
|
@@ -206,11 +239,13 @@ class GraphqlModelGenerator < Rails::Generators::NamedBase
|
|
206
239
|
if field[:reference].present? || field[:type] == 'references' then type = field[:name].camelize + "Type" end
|
207
240
|
if field[:array].present? then type = "[" + type + "]" end
|
208
241
|
str += type
|
209
|
-
if field[:required].present? then
|
242
|
+
if field[:required].present? then
|
243
|
+
str += ', null: false'
|
244
|
+
else
|
245
|
+
str += ', null: true'
|
246
|
+
end
|
210
247
|
str
|
211
248
|
}
|
212
|
-
|
213
|
-
# print_array(@type_fields, "Type fields")
|
214
249
|
end
|
215
250
|
|
216
251
|
def generate_model_lines
|
@@ -218,16 +253,13 @@ class GraphqlModelGenerator < Rails::Generators::NamedBase
|
|
218
253
|
@parsed_fields
|
219
254
|
.filter{|field| field[:type] == 'references'}
|
220
255
|
.map{|field|
|
221
|
-
str = '
|
256
|
+
str = 'belongs_to :'
|
222
257
|
if field[:reference].present?
|
223
258
|
str += field[:reference].underscore
|
224
259
|
end
|
225
260
|
|
226
|
-
str += ', dependent: :destroy'
|
227
261
|
str
|
228
262
|
}
|
229
|
-
|
230
|
-
# print_array(@model_lines, "Model lines")
|
231
263
|
end
|
232
264
|
|
233
265
|
def migration_fields
|
@@ -240,8 +272,6 @@ class GraphqlModelGenerator < Rails::Generators::NamedBase
|
|
240
272
|
if field[:required].present? then str += ', null: false' end
|
241
273
|
str
|
242
274
|
}
|
243
|
-
|
244
|
-
# print_array(@migration_fields, "Migration lines")
|
245
275
|
end
|
246
276
|
|
247
277
|
#
|
@@ -270,6 +300,18 @@ class GraphqlModelGenerator < Rails::Generators::NamedBase
|
|
270
300
|
if type == 'Datetime' then type = 'String'
|
271
301
|
elsif type == 'Json' then type = 'GraphQL::Types::JSON'
|
272
302
|
elsif type == 'Boolean' then type = 'GraphQL::Types::Boolean'
|
303
|
+
elsif type == 'Integer' then type = 'Int'
|
304
|
+
end
|
305
|
+
type
|
306
|
+
end
|
307
|
+
|
308
|
+
def cast_to_graphql_input(field)
|
309
|
+
type = field[:type].camelize
|
310
|
+
|
311
|
+
if type == 'Datetime' then type = 'String'
|
312
|
+
elsif type == 'Json' then type = 'JSON'
|
313
|
+
elsif type == 'Boolean' then type = 'Boolean'
|
314
|
+
elsif type == 'Integer' then type = 'Int'
|
273
315
|
end
|
274
316
|
type
|
275
317
|
end
|
@@ -292,9 +334,9 @@ class GraphqlModelGenerator < Rails::Generators::NamedBase
|
|
292
334
|
def print_note
|
293
335
|
puts "\n\nSucces!"
|
294
336
|
puts "Add these lines to your app/graphql/types/mutation_type.rb\n\n"
|
295
|
-
puts "field :create_#{@snake_case_name}, mutation:
|
296
|
-
puts "field :update_#{@snake_case_name}, mutation:
|
297
|
-
puts "field :delete_#{@snake_case_name}, mutation:
|
337
|
+
puts "field :create_#{@snake_case_name}, mutation: Mutations::Create#{@camelize_name}"
|
338
|
+
puts "field :update_#{@snake_case_name}, mutation: Mutations::Update#{@camelize_name}"
|
339
|
+
puts "field :delete_#{@snake_case_name}, mutation: Mutations::Delete#{@camelize_name}"
|
298
340
|
puts "\n"
|
299
341
|
end
|
300
342
|
end
|
File without changes
|
@@ -0,0 +1,39 @@
|
|
1
|
+
RSpec.describe 'Delete<%= @camelize_name %>', type: :request do
|
2
|
+
include_context 'authenticated user'
|
3
|
+
|
4
|
+
def query()
|
5
|
+
<%= " <<~GQL" %>
|
6
|
+
mutation Delete<%= @camelize_name %>($id: ID!) {
|
7
|
+
delete<%= @camelize_name %>(input: {id: $id}) {
|
8
|
+
id
|
9
|
+
<%=
|
10
|
+
@parsed_fields.filter{|f| !f[:reference].present? }.map{|field|
|
11
|
+
var = field[:name].camelize
|
12
|
+
var[0] = var[0].downcase
|
13
|
+
var
|
14
|
+
}.join("\n ")
|
15
|
+
%>
|
16
|
+
}
|
17
|
+
}
|
18
|
+
GQL
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'delete_<%= @snake_case_name %> success' do
|
22
|
+
<%= @snake_case_name%> = create(:<%= @snake_case_name %>)
|
23
|
+
variables = { id: <%= @snake_case_name%>.id }
|
24
|
+
|
25
|
+
json = graphql(query, variables: variables)
|
26
|
+
data = json['delete<%= @camelize_name %>']
|
27
|
+
|
28
|
+
expect(data).to include('id' => <%= @snake_case_name%>.id)
|
29
|
+
<%=
|
30
|
+
@parsed_fields.filter{|f| !f[:reference].present? }.map{|field|
|
31
|
+
var = field[:name].camelize
|
32
|
+
var[0] = var[0].downcase
|
33
|
+
"expect(data).to include('#{var}' => updated_#{@snake_case_name}.#{field[:name]})"
|
34
|
+
}.join("\n ")
|
35
|
+
%>
|
36
|
+
|
37
|
+
expect(<%= @camelize_name %>.count).to eq(0)
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
FactoryBot.define do
|
2
|
+
factory :<%= @snake_case_name %> do
|
3
|
+
<%=
|
4
|
+
@parsed_fields.map{|field|
|
5
|
+
value =
|
6
|
+
case field[:type]
|
7
|
+
when "string"
|
8
|
+
" \"My #{field[:name]} \" + rand(1..10000).to_s"
|
9
|
+
when "integer"
|
10
|
+
"rand(1..10000)"
|
11
|
+
when "boolean"
|
12
|
+
"false"
|
13
|
+
when "json"
|
14
|
+
{hello: :world, new: 1}
|
15
|
+
else
|
16
|
+
'nil'
|
17
|
+
end
|
18
|
+
|
19
|
+
if field[:array].present? and !field[:reference].present? then value = "[" + value + "]" end
|
20
|
+
"#{field[:name]} { #{value} }"
|
21
|
+
}.join("\n ")
|
22
|
+
%>
|
23
|
+
|
24
|
+
factory :updated_<%= @snake_case_name %> do
|
25
|
+
<%=
|
26
|
+
@parsed_fields.map{|field|
|
27
|
+
value =
|
28
|
+
case field[:type]
|
29
|
+
when "string"
|
30
|
+
" \"My #{field[:name]} updated \" + rand(1..10000).to_s"
|
31
|
+
when "integer"
|
32
|
+
"rand(1..10000)"
|
33
|
+
when "boolean"
|
34
|
+
"false"
|
35
|
+
when "json"
|
36
|
+
{hello: :updated_world, updated: 100}
|
37
|
+
else
|
38
|
+
'nil'
|
39
|
+
end
|
40
|
+
|
41
|
+
if field[:array].present? and !field[:reference].present? then value = "[" + value + "]" end
|
42
|
+
" #{field[:name]} { #{value} }"
|
43
|
+
}.join("\n ")
|
44
|
+
%>
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
RSpec.describe 'Update<%= @camelize_name %>', type: :request do
|
2
|
+
include_context 'authenticated user'
|
3
|
+
|
4
|
+
def query()
|
5
|
+
<%= " <<~GQL" %>
|
6
|
+
mutation Update<%= @camelize_name %>(<%= @update_test_define_line %>) {
|
7
|
+
update<%= @camelize_name %>(input: {<%= @update_test_input_line %>}) {
|
8
|
+
id
|
9
|
+
<%=
|
10
|
+
@parsed_fields.filter{|f| !f[:reference].present? }.map{|field|
|
11
|
+
var = field[:name].camelize
|
12
|
+
var[0] = var[0].downcase
|
13
|
+
var
|
14
|
+
}.join("\n ")
|
15
|
+
%>
|
16
|
+
}
|
17
|
+
}
|
18
|
+
GQL
|
19
|
+
end
|
20
|
+
|
21
|
+
it 'update_<%= @snake_case_name %> success' do
|
22
|
+
<%= @snake_case_name%> = create(:<%= @snake_case_name %>)
|
23
|
+
updated_<%= @snake_case_name%> = build(:updated_<%= @snake_case_name %>)
|
24
|
+
variables = as_json(updated_<%= @snake_case_name%>)
|
25
|
+
|
26
|
+
json = graphql(query, variables: variables)
|
27
|
+
data = json['update<%= @camelize_name %>']
|
28
|
+
|
29
|
+
expect(data).to include('id' => <%= @snake_case_name%>.id)
|
30
|
+
<%=
|
31
|
+
@parsed_fields.filter{|f| !f[:reference].present? }.map{|field|
|
32
|
+
var = field[:name].camelize
|
33
|
+
var[0] = var[0].downcase
|
34
|
+
"expect(data).to include('#{var}' => updated_#{@snake_case_name}.#{field[:name]})"
|
35
|
+
}.join("\n ")
|
36
|
+
%>
|
37
|
+
end
|
38
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: graphql_helper_generator
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.16
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Oleg Savinov
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-05-
|
11
|
+
date: 2022-05-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -55,6 +55,9 @@ files:
|
|
55
55
|
- graphql_helper_generator-0.0.10.gem
|
56
56
|
- graphql_helper_generator-0.0.11.gem
|
57
57
|
- graphql_helper_generator-0.0.12.gem
|
58
|
+
- graphql_helper_generator-0.0.13.gem
|
59
|
+
- graphql_helper_generator-0.0.14.gem
|
60
|
+
- graphql_helper_generator-0.0.15.gem
|
58
61
|
- graphql_helper_generator-0.0.9.gem
|
59
62
|
- lib/graphql_helper_generator.rb
|
60
63
|
- lib/graphql_helper_generator/graphql_model/USAGE
|
@@ -67,7 +70,10 @@ files:
|
|
67
70
|
- lib/graphql_helper_generator/graphql_model/templates/mutations/create_mutation_template.erb
|
68
71
|
- lib/graphql_helper_generator/graphql_model/templates/mutations/delete_mutation_template.erb
|
69
72
|
- lib/graphql_helper_generator/graphql_model/templates/mutations/update_mutation_template.erb
|
70
|
-
- lib/graphql_helper_generator/graphql_model/templates/tests/
|
73
|
+
- lib/graphql_helper_generator/graphql_model/templates/tests/create_test_template.erb
|
74
|
+
- lib/graphql_helper_generator/graphql_model/templates/tests/delete_test_template.erb
|
75
|
+
- lib/graphql_helper_generator/graphql_model/templates/tests/factory_template.erb
|
76
|
+
- lib/graphql_helper_generator/graphql_model/templates/tests/update_test_template.erb
|
71
77
|
- lib/graphql_helper_generator/railtie.rb
|
72
78
|
- lib/graphql_helper_generator/version.rb
|
73
79
|
homepage:
|