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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c2821a4fc6bbb71f557c677374667dadc286f55926f840d5db2f52d68383b603
4
- data.tar.gz: a2f7272a6010ada74dc043cf1c27f4adb436e36c32326b9e1f6d57db64d21121
3
+ metadata.gz: eef5c27cdba815948d10961fb689a49888e5efc5e7dbe507f93e48c43e2e01cc
4
+ data.tar.gz: 78ae76a82b62d38e4745366853c964b3b7bb15ffd0b349accf815dcb76d47eba
5
5
  SHA512:
6
- metadata.gz: b57be25c6c726da420599a29e9542a7b04351a962b42079673a89d306218e030c08c858218099ecb52a616a7152aed444095ff1df13ae6e9254842ca34cc9cf0
7
- data.tar.gz: 620112903cdd5a035fa8fd4f5f9b4cfaac5c5116172c2a278e5c4888a820f028975de591a73a24d7e0d1822b03621a587c0074f3f0597862afa80587128e9df0
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
- generate_create_test_lines
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/create_test.erb", dir
107
+ template "tests/create_test_template.erb", dir
94
108
  end
95
109
 
96
- def generate_input_type
97
- filename = @snake_case_name + "_input_type.rb"
98
- dir = "app/graphql/types/inputs/" + filename
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 "graphql_types/input_type_template.erb", dir
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
- # print_array(@update_mutation_lines, "Update mutation lines")
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 str += ', null: false' end
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 = 'has_many :'
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: mutations::Create#{@camelize_name}"
296
- puts "field :update_#{@snake_case_name}, mutation: mutations::Update#{@camelize_name}"
297
- puts "field :delete_#{@snake_case_name}, mutation: mutations::Delete#{@camelize_name}"
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
@@ -1,4 +1,3 @@
1
- <%# TEMPLATE TYPE %>
2
1
  module Types
3
2
  class <%= @camelize_name %>Type <%= "<" %> Types::BaseObject
4
3
  <% for field in @type_fields %><%=field%>
@@ -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.13"
2
+ VERSION = "0.0.16"
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.13
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-17 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
@@ -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/create_test.erb
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: