graphql_helper_generator 0.0.11 → 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-generator-0.0.12.gem +0 -0
- data/graphql_helper_generator-0.0.11.gem +0 -0
- data/graphql_helper_generator-0.0.12.gem +0 -0
- data/graphql_helper_generator-0.0.13.gem +0 -0
- data/lib/graphql_helper_generator/graphql_model/graphql_model_generator.rb +88 -20
- data/lib/graphql_helper_generator/graphql_model/templates/graphql_types/test/create_test.erb +0 -0
- data/lib/graphql_helper_generator/graphql_model/templates/tests/create_test.erb +30 -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 +11 -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
|
Binary file
|
Binary file
|
Binary file
|
@@ -20,6 +20,10 @@ class GraphqlModelGenerator < Rails::Generators::NamedBase
|
|
20
20
|
generate_create_mutation
|
21
21
|
generate_update_mutation
|
22
22
|
generate_delete_mutation
|
23
|
+
generate_factory
|
24
|
+
generate_create_test
|
25
|
+
generate_update_test
|
26
|
+
generate_delete_test
|
23
27
|
|
24
28
|
if options[:input_type].present? then generate_input_type end
|
25
29
|
|
@@ -34,7 +38,7 @@ class GraphqlModelGenerator < Rails::Generators::NamedBase
|
|
34
38
|
migration_name = @snake_case_name + ".rb"
|
35
39
|
migration_dir = "db/migrate/" + prefix_name + "_" + migration_name
|
36
40
|
|
37
|
-
template "
|
41
|
+
template "migration_template.erb", migration_dir
|
38
42
|
end
|
39
43
|
|
40
44
|
def generate_model
|
@@ -45,14 +49,6 @@ class GraphqlModelGenerator < Rails::Generators::NamedBase
|
|
45
49
|
template "model_template.erb", dir
|
46
50
|
end
|
47
51
|
|
48
|
-
def generate_type
|
49
|
-
generate_create_mutation_lines
|
50
|
-
filename = "create_" + @snake_case_name + ".rb"
|
51
|
-
dir = "app/graphql/mutations/" + filename
|
52
|
-
|
53
|
-
template "create_mutation_template.erb", dir
|
54
|
-
end
|
55
|
-
|
56
52
|
def generate_type
|
57
53
|
generate_type_fields
|
58
54
|
filename = @snake_case_name + "_type.rb"
|
@@ -91,6 +87,41 @@ class GraphqlModelGenerator < Rails::Generators::NamedBase
|
|
91
87
|
template "graphql_types/input_type_template.erb", dir
|
92
88
|
end
|
93
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
|
+
|
102
|
+
def generate_create_test
|
103
|
+
generate_create_test_lines
|
104
|
+
filename = "create_" + @snake_case_name + "_spec.rb"
|
105
|
+
dir = "spec/requests/" + filename
|
106
|
+
|
107
|
+
template "tests/create_test_template.erb", dir
|
108
|
+
end
|
109
|
+
|
110
|
+
def generate_update_test
|
111
|
+
generate_update_test_lines
|
112
|
+
filename = "update_" + @snake_case_name + "_spec.rb"
|
113
|
+
dir = "spec/requests/" + filename
|
114
|
+
|
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
|
123
|
+
end
|
124
|
+
|
94
125
|
def parse_variables
|
95
126
|
@parsed_fields =
|
96
127
|
fields.map{|field|
|
@@ -127,10 +158,44 @@ class GraphqlModelGenerator < Rails::Generators::NamedBase
|
|
127
158
|
str += type + ', required: false'
|
128
159
|
str
|
129
160
|
}
|
161
|
+
end
|
130
162
|
|
131
|
-
|
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(', ')
|
132
179
|
end
|
133
180
|
|
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(', ')
|
196
|
+
end
|
197
|
+
|
198
|
+
|
134
199
|
def generate_create_mutation_lines
|
135
200
|
@create_mutation_lines =
|
136
201
|
@parsed_fields.map{|field|
|
@@ -156,8 +221,6 @@ class GraphqlModelGenerator < Rails::Generators::NamedBase
|
|
156
221
|
end
|
157
222
|
str
|
158
223
|
}
|
159
|
-
|
160
|
-
# print_array(@create_mutation_lines, "CREATE mutation lines")
|
161
224
|
end
|
162
225
|
|
163
226
|
def generate_type_fields
|
@@ -179,8 +242,6 @@ class GraphqlModelGenerator < Rails::Generators::NamedBase
|
|
179
242
|
if field[:required].present? then str += ', null: false' end
|
180
243
|
str
|
181
244
|
}
|
182
|
-
|
183
|
-
# print_array(@type_fields, "Type fields")
|
184
245
|
end
|
185
246
|
|
186
247
|
def generate_model_lines
|
@@ -188,16 +249,13 @@ class GraphqlModelGenerator < Rails::Generators::NamedBase
|
|
188
249
|
@parsed_fields
|
189
250
|
.filter{|field| field[:type] == 'references'}
|
190
251
|
.map{|field|
|
191
|
-
str = '
|
252
|
+
str = 'belongs_to :'
|
192
253
|
if field[:reference].present?
|
193
254
|
str += field[:reference].underscore
|
194
255
|
end
|
195
256
|
|
196
|
-
str += ', dependent: :destroy'
|
197
257
|
str
|
198
258
|
}
|
199
|
-
|
200
|
-
# print_array(@model_lines, "Model lines")
|
201
259
|
end
|
202
260
|
|
203
261
|
def migration_fields
|
@@ -210,8 +268,6 @@ class GraphqlModelGenerator < Rails::Generators::NamedBase
|
|
210
268
|
if field[:required].present? then str += ', null: false' end
|
211
269
|
str
|
212
270
|
}
|
213
|
-
|
214
|
-
# print_array(@migration_fields, "Migration lines")
|
215
271
|
end
|
216
272
|
|
217
273
|
#
|
@@ -240,6 +296,18 @@ class GraphqlModelGenerator < Rails::Generators::NamedBase
|
|
240
296
|
if type == 'Datetime' then type = 'String'
|
241
297
|
elsif type == 'Json' then type = 'GraphQL::Types::JSON'
|
242
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'
|
243
311
|
end
|
244
312
|
type
|
245
313
|
end
|
File without changes
|
@@ -0,0 +1,30 @@
|
|
1
|
+
RSpec.describe 'Create<%= @camelize_name %>', type: :request do
|
2
|
+
include_context 'authenticated user'
|
3
|
+
|
4
|
+
def query()
|
5
|
+
<%= " <<~GQL" %>
|
6
|
+
mutation Create<%= @camelize_name %>(<%= @create_test_define_line %>) {
|
7
|
+
create<%= @camelize_name %>(input: {<%= @create_test_input_line %>}) {
|
8
|
+
id
|
9
|
+
<%=
|
10
|
+
@parsed_fields.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 'create_<%= @snake_case_name %> success' do
|
22
|
+
<%= @snake_case_name%> = build(:<%= @snake_case_name %>)
|
23
|
+
variables = as_json(<%= @snake_case_name%>)
|
24
|
+
|
25
|
+
json = graphql(query, variables: variables)
|
26
|
+
data = json['create<%= @camelize_name %>']
|
27
|
+
|
28
|
+
expect(data).to include('id' => be_present)
|
29
|
+
end
|
30
|
+
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
|
@@ -49,20 +49,29 @@ files:
|
|
49
49
|
- Rakefile
|
50
50
|
- bin/console
|
51
51
|
- bin/setup
|
52
|
+
- graphql-generator-0.0.12.gem
|
52
53
|
- graphql-generator-0.0.8.gem
|
53
54
|
- graphql_generator.gemspec
|
54
55
|
- graphql_helper_generator-0.0.10.gem
|
56
|
+
- graphql_helper_generator-0.0.11.gem
|
57
|
+
- graphql_helper_generator-0.0.12.gem
|
58
|
+
- graphql_helper_generator-0.0.13.gem
|
55
59
|
- graphql_helper_generator-0.0.9.gem
|
56
60
|
- lib/graphql_helper_generator.rb
|
57
61
|
- lib/graphql_helper_generator/graphql_model/USAGE
|
58
62
|
- lib/graphql_helper_generator/graphql_model/graphql_model_generator.rb
|
59
63
|
- lib/graphql_helper_generator/graphql_model/templates/graphql_types/input_type_template.erb
|
64
|
+
- lib/graphql_helper_generator/graphql_model/templates/graphql_types/test/create_test.erb
|
60
65
|
- lib/graphql_helper_generator/graphql_model/templates/graphql_types/type_template.erb
|
61
66
|
- lib/graphql_helper_generator/graphql_model/templates/migration_template.erb
|
62
67
|
- lib/graphql_helper_generator/graphql_model/templates/model_template.erb
|
63
68
|
- lib/graphql_helper_generator/graphql_model/templates/mutations/create_mutation_template.erb
|
64
69
|
- lib/graphql_helper_generator/graphql_model/templates/mutations/delete_mutation_template.erb
|
65
70
|
- lib/graphql_helper_generator/graphql_model/templates/mutations/update_mutation_template.erb
|
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
|
66
75
|
- lib/graphql_helper_generator/railtie.rb
|
67
76
|
- lib/graphql_helper_generator/version.rb
|
68
77
|
homepage:
|