graphql_helper_generator 0.0.13 → 0.0.14
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/lib/graphql_helper_generator/graphql_model/graphql_model_generator.rb +84 -46
- 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 +6 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1c01e8351b061d83ffa83b2f9e5b824c3987093f9abfddbda622f5db1bdd3616
|
4
|
+
data.tar.gz: d1ecf452b3c6d6043edce89701d8546a70a6f286e722a43591a26539b70a6642
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 94150ebaa975477df11aaa46dfa11b04942d2ff599643e11ebf98e50ed7f940abd5f9435cdec40a01df8c2df864860d58d60135bb6fa7902e061897a10d883cb
|
7
|
+
data.tar.gz: 93f49e6b284aeee79c54b0f553f139823834c8b0d98d875f5d6a6447b2beea03a11ee88bc666d6fc9cfcd2c4b5622ca003f3918d0ddf716ab4048ec10048cdba
|
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
|
@@ -209,8 +242,6 @@ class GraphqlModelGenerator < Rails::Generators::NamedBase
|
|
209
242
|
if field[:required].present? then str += ', null: false' end
|
210
243
|
str
|
211
244
|
}
|
212
|
-
|
213
|
-
# print_array(@type_fields, "Type fields")
|
214
245
|
end
|
215
246
|
|
216
247
|
def generate_model_lines
|
@@ -218,16 +249,13 @@ class GraphqlModelGenerator < Rails::Generators::NamedBase
|
|
218
249
|
@parsed_fields
|
219
250
|
.filter{|field| field[:type] == 'references'}
|
220
251
|
.map{|field|
|
221
|
-
str = '
|
252
|
+
str = 'belongs_to :'
|
222
253
|
if field[:reference].present?
|
223
254
|
str += field[:reference].underscore
|
224
255
|
end
|
225
256
|
|
226
|
-
str += ', dependent: :destroy'
|
227
257
|
str
|
228
258
|
}
|
229
|
-
|
230
|
-
# print_array(@model_lines, "Model lines")
|
231
259
|
end
|
232
260
|
|
233
261
|
def migration_fields
|
@@ -240,8 +268,6 @@ class GraphqlModelGenerator < Rails::Generators::NamedBase
|
|
240
268
|
if field[:required].present? then str += ', null: false' end
|
241
269
|
str
|
242
270
|
}
|
243
|
-
|
244
|
-
# print_array(@migration_fields, "Migration lines")
|
245
271
|
end
|
246
272
|
|
247
273
|
#
|
@@ -270,6 +296,18 @@ class GraphqlModelGenerator < Rails::Generators::NamedBase
|
|
270
296
|
if type == 'Datetime' then type = 'String'
|
271
297
|
elsif type == 'Json' then type = 'GraphQL::Types::JSON'
|
272
298
|
elsif type == 'Boolean' then type = 'GraphQL::Types::Boolean'
|
299
|
+
elsif type == 'Integer' then type = 'Int'
|
300
|
+
end
|
301
|
+
type
|
302
|
+
end
|
303
|
+
|
304
|
+
def cast_to_graphql_input(field)
|
305
|
+
type = field[:type].camelize
|
306
|
+
|
307
|
+
if type == 'Datetime' then type = 'String'
|
308
|
+
elsif type == 'Json' then type = 'JSON'
|
309
|
+
elsif type == 'Boolean' then type = 'Boolean'
|
310
|
+
elsif type == 'Integer' then type = 'Int'
|
273
311
|
end
|
274
312
|
type
|
275
313
|
end
|
@@ -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.14
|
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,7 @@ 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
|
58
59
|
- graphql_helper_generator-0.0.9.gem
|
59
60
|
- lib/graphql_helper_generator.rb
|
60
61
|
- lib/graphql_helper_generator/graphql_model/USAGE
|
@@ -68,6 +69,9 @@ files:
|
|
68
69
|
- lib/graphql_helper_generator/graphql_model/templates/mutations/delete_mutation_template.erb
|
69
70
|
- lib/graphql_helper_generator/graphql_model/templates/mutations/update_mutation_template.erb
|
70
71
|
- lib/graphql_helper_generator/graphql_model/templates/tests/create_test.erb
|
72
|
+
- lib/graphql_helper_generator/graphql_model/templates/tests/delete_test_template.erb
|
73
|
+
- lib/graphql_helper_generator/graphql_model/templates/tests/factory_template.erb
|
74
|
+
- lib/graphql_helper_generator/graphql_model/templates/tests/update_test_template.erb
|
71
75
|
- lib/graphql_helper_generator/railtie.rb
|
72
76
|
- lib/graphql_helper_generator/version.rb
|
73
77
|
homepage:
|