graphql_helper_generator 0.0.12 → 0.0.15

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
  SHA256:
3
- metadata.gz: e2e636dba99da5d43c345796d2dc2726c67904b34aa459ea890f662f8409be39
4
- data.tar.gz: 1d6f64e69cc2639c6b14cd3b61ee1fb62929d146014e83fc113ea1e08e670c1d
3
+ metadata.gz: 36b36b58923ac2f2bbe246e2769ae7f19b4e377c00bce610ab16e3ee3ce812a8
4
+ data.tar.gz: 46cea0392f020668b51deaebed2f9394f099dd189be0020d161fb2c10ca3a2ca
5
5
  SHA512:
6
- metadata.gz: e1a5d3077e92becd5b5b29795c33a7c79e10cee893dc4f3c871550a709b19220fb4f0a78cbed9106bbb9fc853a2430f604f5a9e88a72e2fa711fdf6d067f8543
7
- data.tar.gz: ebb639ea8fb052f28f070d190e0243175fa3a539b4dc645c216f3258aa6653de206f7003c375b931081449fe28b1a9caba06f69313295ffbe53f6f8db3bcf0be
6
+ metadata.gz: 7a8ce6483fa3a429f3117817dea240cea4ee2bc78a4ef85ef696e878e16f398a6c53a2b26da3a235c512845746dbdb761e02734aaa426622ab5f3c02c3ebc995
7
+ data.tar.gz: ece95b8c542c59059963ac1419f36f7bd1610272eb58ddacdafcfecf84b7374c64bf9e58ddd0ec250040cfde167d152113ab5f287e4f677ea382f667ae8a3556
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
 
@@ -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
- # print_array(@update_mutation_lines, "Update mutation lines")
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 = 'has_many :'
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
@@ -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
@@ -1,3 +1,3 @@
1
1
  module GraphqlHelperGenerator
2
- VERSION = "0.0.12"
2
+ VERSION = "0.0.15"
3
3
  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.12
4
+ version: 0.0.15
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-15 00:00:00.000000000 Z
11
+ date: 2022-05-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -49,21 +49,30 @@ 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
55
56
  - graphql_helper_generator-0.0.11.gem
57
+ - graphql_helper_generator-0.0.12.gem
58
+ - graphql_helper_generator-0.0.13.gem
59
+ - graphql_helper_generator-0.0.14.gem
56
60
  - graphql_helper_generator-0.0.9.gem
57
61
  - lib/graphql_helper_generator.rb
58
62
  - lib/graphql_helper_generator/graphql_model/USAGE
59
63
  - lib/graphql_helper_generator/graphql_model/graphql_model_generator.rb
60
64
  - lib/graphql_helper_generator/graphql_model/templates/graphql_types/input_type_template.erb
65
+ - lib/graphql_helper_generator/graphql_model/templates/graphql_types/test/create_test.erb
61
66
  - lib/graphql_helper_generator/graphql_model/templates/graphql_types/type_template.erb
62
67
  - lib/graphql_helper_generator/graphql_model/templates/migration_template.erb
63
68
  - lib/graphql_helper_generator/graphql_model/templates/model_template.erb
64
69
  - lib/graphql_helper_generator/graphql_model/templates/mutations/create_mutation_template.erb
65
70
  - lib/graphql_helper_generator/graphql_model/templates/mutations/delete_mutation_template.erb
66
71
  - lib/graphql_helper_generator/graphql_model/templates/mutations/update_mutation_template.erb
72
+ - lib/graphql_helper_generator/graphql_model/templates/tests/create_test_template.erb
73
+ - lib/graphql_helper_generator/graphql_model/templates/tests/delete_test_template.erb
74
+ - lib/graphql_helper_generator/graphql_model/templates/tests/factory_template.erb
75
+ - lib/graphql_helper_generator/graphql_model/templates/tests/update_test_template.erb
67
76
  - lib/graphql_helper_generator/railtie.rb
68
77
  - lib/graphql_helper_generator/version.rb
69
78
  homepage: