souls 0.13.2 → 0.13.8

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: 0ea12aadbbb6a9f387903874374cd34c674d20282efc8091dab991bb7537e5c9
4
- data.tar.gz: 916cd96da23a25a7603edc8f8e7fe9e9898600cf49f866e92713a4af290b11aa
3
+ metadata.gz: f017a0b2dc2d05a5e78b857b3e437a931d976c0ab0b6c83625ee62f7109092b1
4
+ data.tar.gz: 23bfc89940d3018c6626d38f4cef322829f224acd541100e92f696a3040155c9
5
5
  SHA512:
6
- metadata.gz: bfe0cd627d0c0ffd1d95c7ce298d154559d72fc79f9c12403dff958f63e7e7ba16c8c0cf2c59e808d87a882e9e9f31a0624a34a9a34ae32fecdce0594f4a330a
7
- data.tar.gz: a365282b3fb45363ec3dfff48448e53a951819b3fded09d1964eca415b252cd380759cfe225f44c00c91dc541992717350c82f9efe2c136e212269560c4265d2
6
+ metadata.gz: c228b2dcf307527d6732a37e1b6f8694de43a1641e092a2cee49d1cf3a19595bd52581bb2842e0703e4316ca62335856e4e73960487a2be57dda3d632dd4c424
7
+ data.tar.gz: 70b3e91e48d84161cf97210a8adc360c7266fafef31729a4e18eee2adad7470c0cfaa3c37e40ebca7dc9acac178208dac734d002e87fe93c52d0d6c57a8531b8
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- souls (0.13.0)
4
+ souls (0.13.7)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -12,20 +12,20 @@ GEM
12
12
  minitest (>= 5.1)
13
13
  tzinfo (~> 2.0)
14
14
  zeitwerk (~> 2.3)
15
- ast (2.4.1)
15
+ ast (2.4.2)
16
16
  ast_utils (0.3.0)
17
17
  parser (~> 2.4)
18
18
  thor (>= 0.19)
19
- concurrent-ruby (1.1.7)
19
+ concurrent-ruby (1.1.8)
20
20
  diff-lcs (1.4.4)
21
21
  ffi (1.14.2)
22
22
  i18n (1.8.7)
23
23
  concurrent-ruby (~> 1.0)
24
24
  language_server-protocol (3.15.0.1)
25
- listen (3.4.0)
25
+ listen (3.4.1)
26
26
  rb-fsevent (~> 0.10, >= 0.10.3)
27
27
  rb-inotify (~> 0.9, >= 0.9.10)
28
- minitest (5.14.2)
28
+ minitest (5.14.3)
29
29
  parallel (1.20.1)
30
30
  parser (2.7.2.0)
31
31
  ast (~> 2.4.1)
@@ -34,7 +34,7 @@ GEM
34
34
  rb-fsevent (0.10.4)
35
35
  rb-inotify (0.10.1)
36
36
  ffi (~> 1.0)
37
- rbs (1.0.0)
37
+ rbs (1.0.4)
38
38
  regexp_parser (2.0.3)
39
39
  rexml (3.2.4)
40
40
  rspec (3.1.0)
@@ -58,7 +58,7 @@ GEM
58
58
  rubocop-ast (>= 1.2.0, < 2.0)
59
59
  ruby-progressbar (~> 1.7)
60
60
  unicode-display_width (>= 1.4.0, < 2.0)
61
- rubocop-ast (1.4.0)
61
+ rubocop-ast (1.4.1)
62
62
  parser (>= 2.7.1.5)
63
63
  ruby-progressbar (1.11.0)
64
64
  steep (0.39.0)
@@ -69,7 +69,7 @@ GEM
69
69
  parser (~> 2.7.0)
70
70
  rainbow (>= 2.2.2, < 4.0)
71
71
  rbs (~> 1.0.0)
72
- thor (1.0.1)
72
+ thor (1.1.0)
73
73
  tzinfo (2.0.4)
74
74
  concurrent-ruby (~> 1.0)
75
75
  unicode-display_width (1.7.0)
data/exe/souls CHANGED
@@ -13,27 +13,27 @@ begin
13
13
  puts "you need to specify your app name \n `souls new app_name`"
14
14
  exit
15
15
  end
16
- puts "Which framework: \n 1. SOULS gRPC Service \n 2. SOULS GraphQL API gRPC compatible \n 3. SOULS GraphQL API \n 4. SOULS Media Web \n 5. SOULS Admin Web \n Enter Number: "
16
+ puts "Which framework: \n 1. SOULS GraphQL API \n 2. SOULS GraphQL API gRPC compatible \n 3. SOULS gRPC Service \n 4. SOULS Media Web \n 5. SOULS Admin Web \n Enter Number: "
17
17
  strain = STDIN.gets.chomp.to_i
18
18
  (1..5).include?(strain) ? puts("Generating Souls.. \n") : raise(StandardError, "Choose Number 1..5")
19
19
  Souls::Init.create_souls strain: strain, app_name: ARGV[1]
20
20
  when "s", "server"
21
21
  strain = Souls.configuration.strain
22
22
  case strain
23
- when "api", "graph"
24
- system "bundle exec puma -p 3000"
23
+ when "media", "admin"
24
+ system "yarn dev"
25
25
  when "service"
26
26
  system "bundle exec rake run_server"
27
27
  else
28
- system "yarn dev"
28
+ system "bundle exec puma -p 3000"
29
29
  end
30
30
  when "c", "console"
31
31
  strain = Souls.configuration.strain
32
32
  case strain
33
- when "api", "graph", "service"
34
- system "bundle exec irb"
35
- else
33
+ when "media", "admin"
36
34
  system "yarn dev"
35
+ else
36
+ system "bundle exec irb"
37
37
  end
38
38
  when "i", "infra"
39
39
  Souls.send ARGV[1]
@@ -45,6 +45,8 @@ begin
45
45
  puts Souls::VERSION
46
46
  when "g", "generate"
47
47
  case ARGV[1]
48
+ when "test_dir"
49
+ Souls::Init.test_dir
48
50
  when "test"
49
51
  Souls::Init.single_migrate class_name: "user"
50
52
  when "model"
data/lib/souls/init.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  module Souls
2
- STRAINS = ["service", "api", "graph", "media", "admin"]
2
+ STRAINS = ["graph", "api", "service", "media", "admin"]
3
3
  module Init
4
4
  class << self
5
5
  def create_souls strain: 1, app_name: "souls"
@@ -253,6 +253,19 @@ module Souls
253
253
  [file_path]
254
254
  end
255
255
 
256
+ def test_dir
257
+ FileUtils.mkdir_p "./app/graphql/mutations"
258
+ FileUtils.mkdir_p "./app/graphql/queries"
259
+ FileUtils.mkdir_p "./app/graphql/types"
260
+ FileUtils.mkdir_p "./spec/factories"
261
+ FileUtils.mkdir_p "./spec/queries"
262
+ FileUtils.mkdir_p "./spec/mutations"
263
+ FileUtils.mkdir_p "./spec/models"
264
+ FileUtils.mkdir_p "./db/"
265
+ FileUtils.touch "./db/schema.rb"
266
+ puts "test dir created!"
267
+ end
268
+
256
269
  def type_check type
257
270
  {
258
271
  bigint: "Integer",
@@ -272,8 +285,8 @@ module Souls
272
285
  float: 4.2,
273
286
  string: '"MyString"',
274
287
  text: '"MyString"',
275
- datetime: "Time.now",
276
- date: "Time.now",
288
+ datetime: "DateTime.now",
289
+ date: "DateTime.now",
277
290
  boolean: false,
278
291
  integer: 1
279
292
  }[type.to_sym]
@@ -304,15 +317,36 @@ module Souls
304
317
  file_path = "./app/graphql/mutations/#{class_name}/create_#{class_name}.rb"
305
318
  path = "./db/schema.rb"
306
319
  @on = false
320
+ @user_exist = false
321
+ @relation_params = []
307
322
  File.open(file_path, "a") do |new_line|
308
323
  File.open(path, "r") do |f|
309
324
  f.each_line.with_index do |line, i|
310
325
  if @on
311
- break if line.include?("end") || line.include?("t.index")
326
+ if line.include?("end") || line.include?("t.index")
327
+ if @user_exist
328
+ new_line.write <<-EOS
329
+
330
+ def resolve **args
331
+ args[:user_id] = context[:user].id
332
+ EOS
333
+ else
334
+ new_line.write <<-EOS
335
+
336
+ def resolve **args
337
+ EOS
338
+ end
339
+ break
340
+ end
312
341
  field = "[String]" if line.include?("array: true")
313
342
  type, name = line.split(",")[0].gsub("\"", "").scan(/((?<=t\.).+(?=\s)) (.+)/)[0]
314
343
  field ||= type_check type
315
344
  case name
345
+ when "user_id"
346
+ @user_exist = true
347
+ when /$*_id\z/
348
+ @relation_params << name
349
+ new_line.write " argument :#{name}, String, required: false\n"
316
350
  when "created_at", "updated_at"
317
351
  next
318
352
  else
@@ -323,14 +357,24 @@ module Souls
323
357
  end
324
358
  end
325
359
  end
360
+ @relation_params
361
+ end
362
+
363
+ def create_mutation_after_params class_name: "article", relation_params: []
364
+ return false if relation_params.empty?
365
+ file_path = "./app/graphql/mutations/#{class_name}/create_#{class_name}.rb"
366
+ relation_params.each do |params_name|
367
+ File.open(file_path, "a") do |new_line|
368
+ new_line.write " _, args[:#{params_name}] = SoulsApiSchema.from_global_id(args[:#{params_name}])\n"
369
+ end
370
+ end
371
+ true
326
372
  end
327
373
 
328
374
  def create_mutation_end class_name: "souls"
329
375
  file_path = "./app/graphql/mutations/#{class_name}/create_#{class_name}.rb"
330
376
  File.open(file_path, "a") do |new_line|
331
377
  new_line.write <<~EOS
332
-
333
- def resolve **args
334
378
  #{class_name} = ::#{class_name.camelize}.new args
335
379
  if #{class_name}.save
336
380
  { #{class_name}: #{class_name} }
@@ -357,6 +401,7 @@ module Souls
357
401
  class Update#{class_name.camelize} < BaseMutation
358
402
  field :#{class_name}, Types::#{class_name.camelize}Type, null: false
359
403
 
404
+ argument :id, String, required: true
360
405
  EOS
361
406
  end
362
407
  end
@@ -365,15 +410,38 @@ module Souls
365
410
  file_path = "./app/graphql/mutations/#{class_name}/update_#{class_name}.rb"
366
411
  path = "./db/schema.rb"
367
412
  @on = false
413
+ @user_exist = false
414
+ @relation_params = []
368
415
  File.open(file_path, "a") do |new_line|
369
416
  File.open(path, "r") do |f|
370
417
  f.each_line.with_index do |line, i|
371
418
  if @on
372
- break if line.include?("end") || line.include?("t.index")
419
+ if line.include?("end") || line.include?("t.index")
420
+ if @user_exist
421
+ new_line.write <<-EOS
422
+
423
+ def resolve **args
424
+ args[:user_id] = context[:user].id
425
+ _, args[:id] = SoulsApiSchema.from_global_id(args[:id])
426
+ EOS
427
+ else
428
+ new_line.write <<-EOS
429
+
430
+ def resolve **args
431
+ _, args[:id] = SoulsApiSchema.from_global_id(args[:id])
432
+ EOS
433
+ end
434
+ break
435
+ end
373
436
  field = "[String]" if line.include?("array: true")
374
437
  type, name = line.split(",")[0].gsub("\"", "").scan(/((?<=t\.).+(?=\s)) (.+)/)[0]
375
438
  field ||= type_check type
376
439
  case name
440
+ when "user_id"
441
+ @user_exist = true
442
+ when /$*_id\z/
443
+ @relation_params << name
444
+ new_line.write " argument :#{name}, String, required: false\n"
377
445
  when "created_at", "updated_at"
378
446
  next
379
447
  else
@@ -384,14 +452,24 @@ module Souls
384
452
  end
385
453
  end
386
454
  end
455
+ @relation_params
456
+ end
457
+
458
+ def update_mutation_after_params class_name: "article", relation_params: []
459
+ return false if relation_params.empty?
460
+ file_path = "./app/graphql/mutations/#{class_name}/update_#{class_name}.rb"
461
+ relation_params.each do |params_name|
462
+ File.open(file_path, "a") do |new_line|
463
+ new_line.write " _, args[:#{params_name}] = SoulsApiSchema.from_global_id(args[:#{params_name}])\n"
464
+ end
465
+ end
466
+ true
387
467
  end
388
468
 
389
469
  def update_mutation_end class_name: "souls"
390
470
  file_path = "./app/graphql/mutations/#{class_name}/update_#{class_name}.rb"
391
471
  File.open(file_path, "a") do |new_line|
392
472
  new_line.write <<~EOS
393
-
394
- def resolve **args
395
473
  #{class_name} = ::#{class_name.camelize}.find args[:id]
396
474
  #{class_name}.update args
397
475
  { #{class_name}: ::#{class_name.camelize}.find(args[:id]) }
@@ -408,7 +486,8 @@ module Souls
408
486
 
409
487
  def update_mutation class_name: "souls"
410
488
  update_mutation_head class_name: class_name
411
- update_mutation_params class_name: class_name
489
+ relation_params = update_mutation_params class_name: class_name
490
+ update_mutation_after_params class_name: class_name, relation_params: relation_params
412
491
  update_mutation_end class_name: class_name
413
492
  end
414
493
 
@@ -420,10 +499,11 @@ module Souls
420
499
  module #{class_name.camelize}
421
500
  class Delete#{class_name.camelize} < BaseMutation
422
501
  field :#{class_name}, Types::#{class_name.camelize}Type, null: false
423
- argument :id, Integer, required: true
502
+ argument :id, String, required: true
424
503
 
425
- def resolve id:
426
- #{class_name} = ::#{class_name.camelize}.find id
504
+ def resolve **args
505
+ _, data_id = SoulsApiSchema.from_global_id args[:id]
506
+ #{class_name} = ::#{class_name.camelize}.find data_id
427
507
  #{class_name}.destroy
428
508
  { #{class_name}: #{class_name} }
429
509
  rescue StandardError => error
@@ -452,7 +532,8 @@ module Souls
452
532
  Dir.mkdir "./app/graphql/mutations/#{singularized_class_name}"
453
533
  end
454
534
  create_mutation_head class_name: singularized_class_name
455
- create_mutation_params class_name: singularized_class_name
535
+ relation_params = create_mutation_params class_name: singularized_class_name
536
+ create_mutation_after_params class_name: singularized_class_name, relation_params: relation_params
456
537
  [
457
538
  create_mutation_end(class_name: singularized_class_name),
458
539
  update_mutation(class_name: singularized_class_name),
@@ -490,8 +571,8 @@ module Souls
490
571
  argument :id, String, required: true
491
572
 
492
573
  def resolve **args
493
- _, #{class_name.singularize.underscore}_id = SoulsApiSchema.from_global_id args[:id]
494
- ::#{class_name.camelize}.find(#{class_name.singularize.underscore}_id)
574
+ _, data_id = SoulsApiSchema.from_global_id args[:id]
575
+ ::#{class_name.camelize}.find(data_id)
495
576
  rescue StandardError => error
496
577
  GraphQL::ExecutionError.new error
497
578
  end
@@ -531,7 +612,12 @@ module Souls
531
612
  field = "[String]" if line.include?("array: true")
532
613
  type, name = line.split(",")[0].gsub("\"", "").scan(/((?<=t\.).+(?=\s)) (.+)/)[0]
533
614
  field ||= type_check type
534
- new_line.write " field :#{name}, #{field}, null: true\n"
615
+ case name
616
+ when /$*_id\z/
617
+ new_line.write " field :#{name.gsub("_id", "")}, Types::#{name.gsub("_id", "").singularize.camelize}Type, null: false\n"
618
+ else
619
+ new_line.write " field :#{name}, #{field}, null: true\n"
620
+ end
535
621
  end
536
622
  if table_check(line: line, class_name: class_name)
537
623
  @on = true
@@ -637,64 +723,120 @@ module Souls
637
723
  f.write <<~EOS
638
724
  RSpec.describe \"#{class_name.camelize} Mutation テスト\" do
639
725
  describe "#{class_name.camelize} データを登録する" do
640
- let!(:#{class_name.singularize.underscore}) { FactoryBot.attributes_for(:#{class_name.singularize.underscore}) }
641
-
642
- let(:mutation) do
643
- %(mutation {
644
- create#{class_name.camelize}(input: {
726
+ get_global_key = proc {|class_name, id| Base64.encode64(\"\#{class_name}:\#{id}\")}
645
727
  EOS
646
728
  end
647
729
  end
648
730
 
649
- def rspec_mutation_params class_name: "souls"
650
- file_path = "./spec/mutations/#{class_name.singularize}_spec.rb"
651
- path = "./db/schema.rb"
652
- @on = false
653
- File.open(file_path, "a") do |new_line|
654
- File.open(path, "r") do |f|
655
- f.each_line.with_index do |line, i|
656
- if @on
657
- if line.include?("end") || line.include?("t.index")
658
- new_line.write " }) {\n #{class_name.singularize.camelize(:lower)} {\n id\n"
659
- break
660
- end
661
- type, name = line.split(",")[0].gsub("\"", "").scan(/((?<=t\.).+(?=\s)) (.+)/)[0]
662
- array_true = line.include?("array: true")
663
- case name
664
- when "created_at", "updated_at"
665
- next
666
- else
667
- case type
668
- when "string", "text"
669
- if array_true
670
- new_line.write " #{name.pluralize.camelize(:lower)}: \#{#{class_name.pluralize}[:#{name.pluralize.underscore}]}\n"
671
- else
672
- new_line.write " #{name.singularize.camelize(:lower)}: \"\#{#{class_name.singularize}[:#{name.singularize.underscore}]}\"\n"
673
- end
674
- when "bigint", "integer", "float", "boolean"
675
- new_line.write " #{name.singularize.camelize(:lower)}: \#{#{class_name.singularize}[:#{name.singularize.underscore}]}\n"
676
- when "date", "datetime"
677
- new_line.write " #{name.singularize.camelize(:lower)}: \#{Time.now}\n"
731
+ def rspec_mutation_after_head class_name: "souls"
732
+ file_path = "./spec/mutations/#{class_name.singularize}_spec.rb"
733
+ path = "./db/schema.rb"
734
+ @on = false
735
+ @user_exist = false
736
+ @relation_params = []
737
+ File.open(file_path, "a") do |new_line|
738
+ File.open(path, "r") do |f|
739
+ f.each_line.with_index do |line, i|
740
+ if @on
741
+ if line.include?("end") || line.include?("t.index")
742
+ new_line.write <<-EOS
743
+ let(:#{class_name}) { FactoryBot.attributes_for(:#{class_name}, #{@relation_params.join(", ")}) }
744
+
745
+ let(:mutation) do
746
+ %(mutation {
747
+ create#{class_name.camelize}(input: {
748
+ EOS
749
+ break
750
+ end
751
+ _, name = line.split(",")[0].gsub("\"", "").scan(/((?<=t\.).+(?=\s)) (.+)/)[0]
752
+ case name
753
+ when /$*_id\z/
754
+ relation_col = name.gsub("_id", "")
755
+ @relation_params << "#{name}: get_global_key.call(\"#{name.singularize.camelize.gsub("Id", "")}\", #{relation_col}.id)"
756
+ new_line.write " let(:#{relation_col}) { FactoryBot.create(:#{relation_col}) }\n"
757
+ end
758
+ end
759
+ if table_check(line: line, class_name: class_name)
760
+ @on = true
761
+ end
762
+ end
763
+ end
764
+ end
765
+ end
766
+
767
+ def rspec_mutation_params class_name: "souls"
768
+ file_path = "./spec/mutations/#{class_name.singularize}_spec.rb"
769
+ path = "./db/schema.rb"
770
+ @on = false
771
+ @user_exist = false
772
+ File.open(file_path, "a") do |new_line|
773
+ File.open(path, "r") do |f|
774
+ f.each_line.with_index do |line, i|
775
+ if @on
776
+ if line.include?("end") || line.include?("t.index")
777
+ new_line.write " }) {\n #{class_name.singularize.camelize(:lower)} {\n id\n"
778
+ break
779
+ end
780
+ type, name = line.split(",")[0].gsub("\"", "").scan(/((?<=t\.).+(?=\s)) (.+)/)[0]
781
+ array_true = line.include?("array: true")
782
+ case name
783
+ when "created_at", "updated_at"
784
+ next
785
+ when "user_id"
786
+ @user_exist = true
787
+ when /$*_id\z/
788
+ new_line.write " #{name.singularize.camelize(:lower)}: \"\#{#{class_name.singularize}[:#{name.singularize.underscore}]}\"\n"
789
+ else
790
+ case type
791
+ when "string", "text", "date", "datetime"
792
+ if array_true && name != "tag"
793
+ new_line.write " #{name.pluralize.camelize(:lower)}: \#{#{class_name.singularize}[:#{name.pluralize.underscore}]}\n"
794
+ else
795
+ new_line.write " #{name.singularize.camelize(:lower)}: \"\#{#{class_name.singularize}[:#{name.singularize.underscore}]}\"\n"
678
796
  end
797
+ when "bigint", "integer", "float", "boolean"
798
+ new_line.write " #{name.singularize.camelize(:lower)}: \#{#{class_name.singularize}[:#{name.singularize.underscore}]}\n"
679
799
  end
680
800
  end
681
- if table_check(line: line, class_name: class_name)
682
- @on = true
683
- end
801
+ end
802
+ if table_check(line: line, class_name: class_name)
803
+ @on = true
684
804
  end
685
805
  end
686
806
  end
687
807
  end
808
+ end
688
809
 
689
- def rspec_mutation_params_response class_name: "souls"
690
- file_path = "./spec/mutations/#{class_name.singularize}_spec.rb"
691
- path = "./db/schema.rb"
692
- @on = false
693
- File.open(file_path, "a") do |new_line|
694
- File.open(path, "r") do |f|
695
- f.each_line.with_index do |line, i|
696
- if @on
697
- if line.include?("end") || line.include?("t.index")
810
+ def rspec_mutation_params_response class_name: "souls"
811
+ file_path = "./spec/mutations/#{class_name.singularize}_spec.rb"
812
+ path = "./db/schema.rb"
813
+ @on = false
814
+ File.open(file_path, "a") do |new_line|
815
+ File.open(path, "r") do |f|
816
+ f.each_line.with_index do |line, i|
817
+ if @on
818
+ if line.include?("end") || line.include?("t.index")
819
+ if @user_exist
820
+ new_line.write <<-EOS
821
+ }
822
+ }
823
+ }
824
+ )
825
+ end
826
+
827
+ subject(:result) do
828
+ context = {
829
+ user: user
830
+ }
831
+ SoulsApiSchema.execute(mutation, context: context).as_json
832
+ end
833
+
834
+ it "return #{class_name.camelize} Data" do
835
+ a1 = result.dig("data", "create#{class_name.singularize.camelize}", "#{class_name.singularize.camelize(:lower)}")
836
+ expect(a1).to include(
837
+ "id" => be_a(String),
838
+ EOS
839
+ else
698
840
  new_line.write <<-EOS
699
841
  }
700
842
  }
@@ -711,79 +853,81 @@ module Souls
711
853
  expect(a1).to include(
712
854
  "id" => be_a(String),
713
855
  EOS
714
- break
715
856
  end
716
- _, name = line.split(",")[0].gsub("\"", "").scan(/((?<=t\.).+(?=\s)) (.+)/)[0]
717
- array_true = line.include?("array: true")
718
- case name
719
- when "created_at", "updated_at"
720
- next
857
+ break
858
+ end
859
+ _, name = line.split(",")[0].gsub("\"", "").scan(/((?<=t\.).+(?=\s)) (.+)/)[0]
860
+ array_true = line.include?("array: true")
861
+ case name
862
+ when "user_id", "created_at", "updated_at", /$*_id\z/
863
+ next
864
+ else
865
+ if array_true
866
+ new_line.write " #{name.pluralize.camelize(:lower)}\n"
721
867
  else
722
- if array_true
723
- new_line.write " #{name.pluralize.camelize(:lower)}\n"
724
- else
725
- new_line.write " #{name.singularize.camelize(:lower)}\n"
726
- end
868
+ new_line.write " #{name.singularize.camelize(:lower)}\n"
727
869
  end
728
870
  end
729
- if table_check(line: line, class_name: class_name)
730
- @on = true
731
- end
871
+ end
872
+ if table_check(line: line, class_name: class_name)
873
+ @on = true
732
874
  end
733
875
  end
734
876
  end
735
877
  end
878
+ end
736
879
 
737
- def rspec_mutation_end class_name: "souls"
738
- file_path = "./spec/mutations/#{class_name.singularize}_spec.rb"
739
- path = "./db/schema.rb"
740
- @on = false
741
- File.open(file_path, "a") do |new_line|
742
- File.open(path, "r") do |f|
743
- f.each_line.with_index do |line, i|
744
- if @on
745
- if line.include?("end") || line.include?("t.index")
746
- new_line.write <<-EOS
747
- )
748
- end
749
- end
750
- end
751
- EOS
752
- break
753
- end
754
- type, name = line.split(",")[0].gsub("\"", "").scan(/((?<=t\.).+(?=\s)) (.+)/)[0]
755
- field ||= type_check type
756
- array_true = line.include?("array: true")
757
- case name
758
- when "created_at", "updated_at"
759
- next
760
- else
761
- case type
762
- when "text", "date", "datetime"
763
- if array_true
764
- new_line.write " \"#{name.pluralize.camelize(:lower)}\" => be_all(String),\n"
765
- else
766
- new_line.write " \"#{name.singularize.camelize(:lower)}\" => be_a(String),\n"
880
+ def rspec_mutation_end class_name: "souls"
881
+ file_path = "./spec/mutations/#{class_name.singularize}_spec.rb"
882
+ path = "./db/schema.rb"
883
+ @on = false
884
+ File.open(file_path, "a") do |new_line|
885
+ File.open(path, "r") do |f|
886
+ f.each_line.with_index do |line, i|
887
+ if @on
888
+ if line.include?("end") || line.include?("t.index")
889
+ new_line.write <<~EOS
890
+ )
891
+ end
892
+ end
767
893
  end
768
- when "boolean"
769
- new_line.write " \"#{name.singularize.camelize(:lower)}\" => be_in([true, false]),\n"
770
- when "string", "bigint", "integer", "float"
771
- new_line.write " \"#{name.singularize.camelize(:lower)}\" => be_a(#{field}),\n"
772
- end
773
- end
894
+ EOS
895
+ break
774
896
  end
775
- if table_check(line: line, class_name: class_name)
776
- @on = true
897
+ type, name = line.split(",")[0].gsub("\"", "").scan(/((?<=t\.).+(?=\s)) (.+)/)[0]
898
+ field ||= type_check type
899
+ array_true = line.include?("array: true")
900
+ case name
901
+ when "user_id", "created_at", "updated_at", /$*_id\z/
902
+ next
903
+ else
904
+ case type
905
+ when "text", "date", "datetime"
906
+ if array_true
907
+ new_line.write " \"#{name.pluralize.camelize(:lower)}\" => be_all(String),\n"
908
+ else
909
+ new_line.write " \"#{name.singularize.camelize(:lower)}\" => be_a(String),\n"
910
+ end
911
+ when "boolean"
912
+ new_line.write " \"#{name.singularize.camelize(:lower)}\" => be_in([true, false]),\n"
913
+ when "string", "bigint", "integer", "float"
914
+ new_line.write " \"#{name.singularize.camelize(:lower)}\" => be_a(#{field}),\n"
915
+ end
777
916
  end
778
917
  end
918
+ if table_check(line: line, class_name: class_name)
919
+ @on = true
920
+ end
779
921
  end
780
922
  end
781
- [file_path]
782
923
  end
924
+ [file_path]
925
+ end
783
926
 
784
927
  def rspec_mutation class_name: "souls"
785
928
  singularized_class_name = class_name.singularize
786
929
  rspec_mutation_head class_name: singularized_class_name
930
+ rspec_mutation_after_head class_name: singularized_class_name
787
931
  rspec_mutation_params class_name: singularized_class_name
788
932
  rspec_mutation_params_response class_name: singularized_class_name
789
933
  rspec_mutation_end class_name: singularized_class_name
@@ -795,109 +939,141 @@ end
795
939
  f.write <<~EOS
796
940
  RSpec.describe \"#{class_name.camelize} Query テスト\" do
797
941
  describe "#{class_name.camelize} データを取得する" do
798
- let!(:#{class_name.singularize.underscore}) { FactoryBot.create(:#{class_name.singularize.underscore}) }
799
-
800
- let(:query) do
801
- data_id = Base64.encode64("#{class_name.camelize}:\#{#{class_name.singularize.underscore}.id}")
802
- %(query {
803
- #{class_name.singularize.camelize(:lower)}(id: \\"\#{data_id}\\") {
804
- id
805
942
  EOS
806
943
  end
807
944
  end
808
945
 
809
- def rspec_query_params class_name: "souls"
810
- file_path = "./spec/queries/#{class_name.singularize}_spec.rb"
811
- path = "./db/schema.rb"
812
- @on = false
813
- File.open(file_path, "a") do |new_line|
814
- File.open(path, "r") do |f|
815
- f.each_line.with_index do |line, i|
816
- if @on
817
- if line.include?("end") || line.include?("t.index")
818
- new_line.write <<-EOS
819
- }
946
+ def rspec_query_after_head class_name: "souls"
947
+ file_path = "./spec/queries/#{class_name.singularize}_spec.rb"
948
+ path = "./db/schema.rb"
949
+ @on = false
950
+ @user_exist = false
951
+ @relation_params = []
952
+ File.open(file_path, "a") do |new_line|
953
+ File.open(path, "r") do |f|
954
+ f.each_line.with_index do |line, i|
955
+ if @on
956
+ if line.include?("end") || line.include?("t.index")
957
+ new_line.write <<-EOS
958
+ let(:#{class_name}) { FactoryBot.create(:#{class_name}, #{@relation_params.join(", ")}) }
959
+
960
+ let(:query) do
961
+ data_id = Base64.encode64("#{class_name.camelize}:\#{#{class_name.singularize.underscore}.id}")
962
+ %(query {
963
+ #{class_name.singularize.camelize(:lower)}(id: \\"\#{data_id}\\") {
964
+ id
965
+ EOS
966
+ break
967
+ end
968
+ _, name = line.split(",")[0].gsub("\"", "").scan(/((?<=t\.).+(?=\s)) (.+)/)[0]
969
+ case name
970
+ when /$*_id\z/
971
+ relation_col = name.gsub("_id", "")
972
+ @relation_params << "#{name}: #{relation_col}.id"
973
+ new_line.write " let(:#{relation_col}) { FactoryBot.create(:#{relation_col}) }\n"
974
+ end
975
+ end
976
+ if table_check(line: line, class_name: class_name)
977
+ @on = true
978
+ end
979
+ end
980
+ end
981
+ end
982
+ end
983
+
984
+ def rspec_query_params class_name: "souls"
985
+ file_path = "./spec/queries/#{class_name.singularize}_spec.rb"
986
+ path = "./db/schema.rb"
987
+ @on = false
988
+ File.open(file_path, "a") do |new_line|
989
+ File.open(path, "r") do |f|
990
+ f.each_line.with_index do |line, i|
991
+ if @on
992
+ if line.include?("end") || line.include?("t.index")
993
+ new_line.write <<-EOS
820
994
  }
821
- )
822
- end
995
+ }
996
+ )
997
+ end
823
998
 
824
- subject(:result) do
825
- SoulsApiSchema.execute(query).as_json
826
- end
999
+ subject(:result) do
1000
+ SoulsApiSchema.execute(query).as_json
1001
+ end
827
1002
 
828
- it "return #{class_name.camelize} Data" do
829
- a1 = result.dig("data", "#{class_name.singularize.camelize(:lower)}")
830
- expect(a1).to include(
831
- "id" => be_a(String),
832
- EOS
833
- break
834
- end
835
- _, name = line.split(",")[0].gsub("\"", "").scan(/((?<=t\.).+(?=\s)) (.+)/)[0]
836
- case name
837
- when "created_at", "updated_at"
838
- next
839
- else
840
- new_line.write " #{name.singularize.camelize(:lower)}\n"
841
- end
1003
+ it "return #{class_name.camelize} Data" do
1004
+ a1 = result.dig("data", "#{class_name.singularize.camelize(:lower)}")
1005
+ expect(a1).to include(
1006
+ "id" => be_a(String),
1007
+ EOS
1008
+ break
842
1009
  end
843
- if table_check(line: line, class_name: class_name)
844
- @on = true
1010
+ _, name = line.split(",")[0].gsub("\"", "").scan(/((?<=t\.).+(?=\s)) (.+)/)[0]
1011
+ case name
1012
+ when "user_id", "created_at", "updated_at", /$*_id\z/
1013
+ next
1014
+ else
1015
+ new_line.write " #{name.singularize.camelize(:lower)}\n"
845
1016
  end
846
1017
  end
1018
+ if table_check(line: line, class_name: class_name)
1019
+ @on = true
1020
+ end
847
1021
  end
848
1022
  end
849
1023
  end
1024
+ end
850
1025
 
851
- def rspec_query_end class_name: "souls"
852
- file_path = "./spec/queries/#{class_name.singularize}_spec.rb"
853
- path = "./db/schema.rb"
854
- @on = false
855
- File.open(file_path, "a") do |new_line|
856
- File.open(path, "r") do |f|
857
- f.each_line.with_index do |line, i|
858
- if @on
859
- if line.include?("end") || line.include?("t.index")
860
- new_line.write <<-EOS
1026
+ def rspec_query_end class_name: "souls"
1027
+ file_path = "./spec/queries/#{class_name.singularize}_spec.rb"
1028
+ path = "./db/schema.rb"
1029
+ @on = false
1030
+ File.open(file_path, "a") do |new_line|
1031
+ File.open(path, "r") do |f|
1032
+ f.each_line.with_index do |line, i|
1033
+ if @on
1034
+ if line.include?("end") || line.include?("t.index")
1035
+ new_line.write <<-EOS
861
1036
  )
862
1037
  end
863
1038
  end
864
1039
  end
865
- EOS
866
- break
867
- end
868
- type, name = line.split(",")[0].gsub("\"", "").scan(/((?<=t\.).+(?=\s)) (.+)/)[0]
869
- field ||= type_check type
870
- array_true = line.include?("array: true")
871
- case name
872
- when "created_at", "updated_at"
873
- next
874
- else
875
- case type
876
- when "text", "date", "datetime"
877
- if array_true
878
- new_line.write " \"#{name.singularize.camelize(:lower)}\" => be_all(String),\n"
879
- else
880
- new_line.write " \"#{name.singularize.camelize(:lower)}\" => be_a(String),\n"
881
- end
882
- when "boolean"
883
- new_line.write " \"#{name.singularize.camelize(:lower)}\" => be_in([true, false]),\n"
884
- when "string", "bigint", "integer", "float"
885
- new_line.write " \"#{name.singularize.camelize(:lower)}\" => be_a(#{field}),\n"
886
- end
887
- end
1040
+ EOS
1041
+ break
888
1042
  end
889
- if table_check(line: line, class_name: class_name)
890
- @on = true
1043
+ type, name = line.split(",")[0].gsub("\"", "").scan(/((?<=t\.).+(?=\s)) (.+)/)[0]
1044
+ field ||= type_check type
1045
+ array_true = line.include?("array: true")
1046
+ case name
1047
+ when "user_id", "created_at", "updated_at", /$*_id\z/
1048
+ next
1049
+ else
1050
+ case type
1051
+ when "text", "date", "datetime"
1052
+ if array_true
1053
+ new_line.write " \"#{name.singularize.camelize(:lower)}\" => be_all(String),\n"
1054
+ else
1055
+ new_line.write " \"#{name.singularize.camelize(:lower)}\" => be_a(String),\n"
1056
+ end
1057
+ when "boolean"
1058
+ new_line.write " \"#{name.singularize.camelize(:lower)}\" => be_in([true, false]),\n"
1059
+ when "string", "bigint", "integer", "float"
1060
+ new_line.write " \"#{name.singularize.camelize(:lower)}\" => be_a(#{field}),\n"
1061
+ end
891
1062
  end
892
1063
  end
1064
+ if table_check(line: line, class_name: class_name)
1065
+ @on = true
1066
+ end
893
1067
  end
894
1068
  end
895
- [file_path]
896
1069
  end
1070
+ [file_path]
1071
+ end
897
1072
 
898
1073
  def rspec_query class_name: "souls"
899
1074
  singularized_class_name = class_name.singularize
900
1075
  rspec_query_head class_name: singularized_class_name
1076
+ rspec_query_after_head class_name: singularized_class_name
901
1077
  rspec_query_params class_name: singularized_class_name
902
1078
  rspec_query_end class_name: singularized_class_name
903
1079
  end
data/lib/souls/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Souls
2
- VERSION = "0.13.2"
2
+ VERSION = "0.13.8"
3
3
  end
data/souls.gemspec CHANGED
@@ -1,4 +1,4 @@
1
- require_relative 'lib/souls/version'
1
+ require_relative "lib/souls/version"
2
2
 
3
3
  Gem::Specification.new do |spec|
4
4
  spec.name = "souls"
@@ -6,7 +6,7 @@ Gem::Specification.new do |spec|
6
6
  spec.authors = ["POPPIN-FUMI", "KishiTheMechanic", "James Neve"]
7
7
  spec.email = ["fumitake.kawasaki@el-soul.com", "shota.kishi@el-soul.com", "jamesoneve@gmail.com"]
8
8
 
9
- spec.summary = "SOULS is a Web Application Framework for Microservices on Multi Cloud Platform such as Google Cloud Platform, Amazon Web Services, and Alibaba Cloud. Auto deploy with scalable condition. You can focus on business logic. No more infra problems."
9
+ spec.summary = "SOULS is a GraphQL Based Web Application Framework for Microservices on Multi Cloud Platform such as Google Cloud Platform, Amazon Web Services, and Alibaba Cloud. Auto deploy with scalable condition. You can focus on business logic. No more infra problems."
10
10
  spec.description = "SOULS is a Web Application Framework for Microservices on Multi Cloud Platform such as Google Cloud Platform, Amazon Web Services, and Alibaba Cloud. Auto deploy with scalable condition. You can focus on business logic. No more infra problems."
11
11
  spec.homepage = "https://github.com/elsoul/souls"
12
12
  spec.license = "Apache-2.0"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: souls
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.13.2
4
+ version: 0.13.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - POPPIN-FUMI
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: exe
12
12
  cert_chain: []
13
- date: 2021-01-28 00:00:00.000000000 Z
13
+ date: 2021-02-02 00:00:00.000000000 Z
14
14
  dependencies: []
15
15
  description: SOULS is a Web Application Framework for Microservices on Multi Cloud
16
16
  Platform such as Google Cloud Platform, Amazon Web Services, and Alibaba Cloud.
@@ -72,7 +72,8 @@ requirements: []
72
72
  rubygems_version: 3.2.3
73
73
  signing_key:
74
74
  specification_version: 4
75
- summary: SOULS is a Web Application Framework for Microservices on Multi Cloud Platform
76
- such as Google Cloud Platform, Amazon Web Services, and Alibaba Cloud. Auto deploy
77
- with scalable condition. You can focus on business logic. No more infra problems.
75
+ summary: SOULS is a GraphQL Based Web Application Framework for Microservices on Multi
76
+ Cloud Platform such as Google Cloud Platform, Amazon Web Services, and Alibaba Cloud.
77
+ Auto deploy with scalable condition. You can focus on business logic. No more infra
78
+ problems.
78
79
  test_files: []