souls 0.13.5 → 0.14.0

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: 708f22e2d3efc407f65326eedb0ea4b8958e812b713b8e0a738b22ec9166660f
4
- data.tar.gz: f5eaa355fd1123c0c8e99ee4e9a591169716766c5f32667dd8c0ed3baa5ce2a5
3
+ metadata.gz: 2f85cafa25c985aaea858b7cff89c77a5018da552af067d3dcfba26387a3e95a
4
+ data.tar.gz: b76acb937868bf01ffa08e8a1e6f1681c3dd44eb7b1db51ec4c6753766bd92d2
5
5
  SHA512:
6
- metadata.gz: ebf255d21f902c2ad11d7f4869fc5d671e59065861f7865b4d0365f972a2336d8b92cfbd069ced29ab59f79cf3d824412a1fca119cb230e38f8bb9f467feb25d
7
- data.tar.gz: c2aa3e77d9f73278a5e1f4a73ebb4377de3e6e2d1f8451075df63b8158e85d6422f65c7f28d53fbcc0bb081060446b385040279899151fb4bcc29c78ac257f03
6
+ metadata.gz: db3de76e5715a752dd94d5a4c7324f679ec17a71f9cee24b69b3a47419bb7d7991289d7fef64d101cacd9c445f689754e54bcca944e5b5745cc03069ba8285fa
7
+ data.tar.gz: 5e7b3b0967edff6610959277c53772ac343c8f3260c575c87d691af4949668662e1443ff7c7d6077c77def6265be4abe8c52733377f868f015eb41b0a315ff6f
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- souls (0.13.4)
4
+ souls (0.13.8)
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",
@@ -305,6 +318,7 @@ module Souls
305
318
  path = "./db/schema.rb"
306
319
  @on = false
307
320
  @user_exist = false
321
+ @relation_params = []
308
322
  File.open(file_path, "a") do |new_line|
309
323
  File.open(path, "r") do |f|
310
324
  f.each_line.with_index do |line, i|
@@ -330,6 +344,9 @@ module Souls
330
344
  case name
331
345
  when "user_id"
332
346
  @user_exist = true
347
+ when /$*_id\z/
348
+ @relation_params << name
349
+ new_line.write " argument :#{name}, String, required: false\n"
333
350
  when "created_at", "updated_at"
334
351
  next
335
352
  else
@@ -340,6 +357,18 @@ module Souls
340
357
  end
341
358
  end
342
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
343
372
  end
344
373
 
345
374
  def create_mutation_end class_name: "souls"
@@ -372,6 +401,7 @@ module Souls
372
401
  class Update#{class_name.camelize} < BaseMutation
373
402
  field :#{class_name}, Types::#{class_name.camelize}Type, null: false
374
403
 
404
+ argument :id, String, required: true
375
405
  EOS
376
406
  end
377
407
  end
@@ -381,6 +411,7 @@ module Souls
381
411
  path = "./db/schema.rb"
382
412
  @on = false
383
413
  @user_exist = false
414
+ @relation_params = []
384
415
  File.open(file_path, "a") do |new_line|
385
416
  File.open(path, "r") do |f|
386
417
  f.each_line.with_index do |line, i|
@@ -391,11 +422,13 @@ module Souls
391
422
 
392
423
  def resolve **args
393
424
  args[:user_id] = context[:user].id
425
+ _, args[:id] = SoulsApiSchema.from_global_id(args[:id])
394
426
  EOS
395
427
  else
396
428
  new_line.write <<-EOS
397
429
 
398
430
  def resolve **args
431
+ _, args[:id] = SoulsApiSchema.from_global_id(args[:id])
399
432
  EOS
400
433
  end
401
434
  break
@@ -406,6 +439,9 @@ module Souls
406
439
  case name
407
440
  when "user_id"
408
441
  @user_exist = true
442
+ when /$*_id\z/
443
+ @relation_params << name
444
+ new_line.write " argument :#{name}, String, required: false\n"
409
445
  when "created_at", "updated_at"
410
446
  next
411
447
  else
@@ -416,6 +452,18 @@ module Souls
416
452
  end
417
453
  end
418
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
419
467
  end
420
468
 
421
469
  def update_mutation_end class_name: "souls"
@@ -438,7 +486,8 @@ module Souls
438
486
 
439
487
  def update_mutation class_name: "souls"
440
488
  update_mutation_head class_name: class_name
441
- 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
442
491
  update_mutation_end class_name: class_name
443
492
  end
444
493
 
@@ -483,7 +532,8 @@ module Souls
483
532
  Dir.mkdir "./app/graphql/mutations/#{singularized_class_name}"
484
533
  end
485
534
  create_mutation_head class_name: singularized_class_name
486
- 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
487
537
  [
488
538
  create_mutation_end(class_name: singularized_class_name),
489
539
  update_mutation(class_name: singularized_class_name),
@@ -562,7 +612,12 @@ module Souls
562
612
  field = "[String]" if line.include?("array: true")
563
613
  type, name = line.split(",")[0].gsub("\"", "").scan(/((?<=t\.).+(?=\s)) (.+)/)[0]
564
614
  field ||= type_check type
565
- 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
566
621
  end
567
622
  if table_check(line: line, class_name: class_name)
568
623
  @on = true
@@ -668,67 +723,115 @@ module Souls
668
723
  f.write <<~EOS
669
724
  RSpec.describe \"#{class_name.camelize} Mutation テスト\" do
670
725
  describe "#{class_name.camelize} データを登録する" do
671
- let(:#{class_name.singularize.underscore}) { FactoryBot.attributes_for(:#{class_name.singularize.underscore}) }
672
-
673
- let(:mutation) do
674
- %(mutation {
675
- create#{class_name.camelize}(input: {
676
726
  EOS
677
727
  end
678
728
  end
679
729
 
680
- def rspec_mutation_params class_name: "souls"
681
- file_path = "./spec/mutations/#{class_name.singularize}_spec.rb"
682
- path = "./db/schema.rb"
683
- @on = false
684
- @user_exist = false
685
- File.open(file_path, "a") do |new_line|
686
- File.open(path, "r") do |f|
687
- f.each_line.with_index do |line, i|
688
- if @on
689
- if line.include?("end") || line.include?("t.index")
690
- new_line.write " }) {\n #{class_name.singularize.camelize(:lower)} {\n id\n"
691
- break
692
- end
693
- type, name = line.split(",")[0].gsub("\"", "").scan(/((?<=t\.).+(?=\s)) (.+)/)[0]
694
- array_true = line.include?("array: true")
695
- case name
696
- when "created_at", "updated_at"
697
- next
698
- when "user_id"
699
- @user_exist = true
730
+ def rspec_mutation_after_head class_name: "souls"
731
+ file_path = "./spec/mutations/#{class_name.singularize}_spec.rb"
732
+ path = "./db/schema.rb"
733
+ @on = false
734
+ @user_exist = false
735
+ @relation_params = []
736
+ File.open(file_path, "a") do |new_line|
737
+ File.open(path, "r") do |f|
738
+ f.each_line.with_index do |line, i|
739
+ if @on
740
+ if line.include?("end") || line.include?("t.index")
741
+ if @relation_params.empty?
742
+ new_line.write <<-EOS
743
+ let(:#{class_name}) { FactoryBot.attributes_for(:#{class_name}) }
744
+
745
+ let(:mutation) do
746
+ %(mutation {
747
+ create#{class_name.camelize}(input: {
748
+ EOS
700
749
  else
701
- case type
702
- when "string", "text", "date", "datetime"
703
- if array_true && name != "tag"
704
- new_line.write " #{name.pluralize.camelize(:lower)}: \#{#{class_name.singularize}[:#{name.pluralize.underscore}]}\n"
705
- else
706
- new_line.write " #{name.singularize.camelize(:lower)}: \"\#{#{class_name.singularize}[:#{name.singularize.underscore}]}\"\n"
707
- end
708
- when "bigint", "integer", "float", "boolean"
709
- new_line.write " #{name.singularize.camelize(:lower)}: \#{#{class_name.singularize}[:#{name.singularize.underscore}]}\n"
710
- end
750
+ new_line.write <<-EOS
751
+
752
+ get_global_key = proc { |class_name, id| Base64.encode64(\"\#{class_name}:\#{id}\") }
753
+ let(:#{class_name}) { FactoryBot.attributes_for(:#{class_name}, #{@relation_params.join(", ")}) }
754
+
755
+ let(:mutation) do
756
+ %(mutation {
757
+ create#{class_name.camelize}(input: {
758
+ EOS
711
759
  end
760
+ break
712
761
  end
713
- if table_check(line: line, class_name: class_name)
714
- @on = true
762
+ _, name = line.split(",")[0].gsub("\"", "").scan(/((?<=t\.).+(?=\s)) (.+)/)[0]
763
+ case name
764
+ when "user_id"
765
+ relation_col = name.gsub("_id", "")
766
+ new_line.write " let(:#{relation_col}) { FactoryBot.create(:#{relation_col}) }\n"
767
+ when /$*_id\z/
768
+ relation_col = name.gsub("_id", "")
769
+ @relation_params << "#{name}: get_global_key.call(\"#{name.singularize.camelize.gsub("Id", "")}\", #{relation_col}.id)"
770
+ new_line.write " let(:#{relation_col}) { FactoryBot.create(:#{relation_col}) }\n"
715
771
  end
716
772
  end
773
+ if table_check(line: line, class_name: class_name)
774
+ @on = true
775
+ end
717
776
  end
718
777
  end
719
778
  end
779
+ end
720
780
 
721
- def rspec_mutation_params_response class_name: "souls"
722
- file_path = "./spec/mutations/#{class_name.singularize}_spec.rb"
723
- path = "./db/schema.rb"
724
- @on = false
725
- File.open(file_path, "a") do |new_line|
726
- File.open(path, "r") do |f|
727
- f.each_line.with_index do |line, i|
728
- if @on
729
- if line.include?("end") || line.include?("t.index")
730
- if @user_exist
731
- new_line.write <<-EOS
781
+ def rspec_mutation_params class_name: "souls"
782
+ file_path = "./spec/mutations/#{class_name.singularize}_spec.rb"
783
+ path = "./db/schema.rb"
784
+ @on = false
785
+ @user_exist = false
786
+ File.open(file_path, "a") do |new_line|
787
+ File.open(path, "r") do |f|
788
+ f.each_line.with_index do |line, i|
789
+ if @on
790
+ if line.include?("end") || line.include?("t.index")
791
+ new_line.write " }) {\n #{class_name.singularize.camelize(:lower)} {\n id\n"
792
+ break
793
+ end
794
+ type, name = line.split(",")[0].gsub("\"", "").scan(/((?<=t\.).+(?=\s)) (.+)/)[0]
795
+ array_true = line.include?("array: true")
796
+ case name
797
+ when "created_at", "updated_at"
798
+ next
799
+ when "user_id"
800
+ @user_exist = true
801
+ when /$*_id\z/
802
+ new_line.write " #{name.singularize.camelize(:lower)}: \"\#{#{class_name.singularize}[:#{name.singularize.underscore}]}\"\n"
803
+ else
804
+ case type
805
+ when "string", "text", "date", "datetime"
806
+ if array_true
807
+ new_line.write " #{name.pluralize.camelize(:lower)}: \#{#{class_name.singularize}[:#{name.pluralize.underscore}]}\n"
808
+ else
809
+ new_line.write " #{name.singularize.camelize(:lower)}: \"\#{#{class_name.singularize}[:#{name.singularize.underscore}]}\"\n"
810
+ end
811
+ when "bigint", "integer", "float", "boolean"
812
+ new_line.write " #{name.singularize.camelize(:lower)}: \#{#{class_name.singularize}[:#{name.singularize.underscore}]}\n"
813
+ end
814
+ end
815
+ end
816
+ if table_check(line: line, class_name: class_name)
817
+ @on = true
818
+ end
819
+ end
820
+ end
821
+ end
822
+ end
823
+
824
+ def rspec_mutation_params_response class_name: "souls"
825
+ file_path = "./spec/mutations/#{class_name.singularize}_spec.rb"
826
+ path = "./db/schema.rb"
827
+ @on = false
828
+ File.open(file_path, "a") do |new_line|
829
+ File.open(path, "r") do |f|
830
+ f.each_line.with_index do |line, i|
831
+ if @on
832
+ if line.include?("end") || line.include?("t.index")
833
+ if @user_exist
834
+ new_line.write <<-EOS
732
835
  }
733
836
  }
734
837
  }
@@ -746,9 +849,9 @@ module Souls
746
849
  a1 = result.dig("data", "create#{class_name.singularize.camelize}", "#{class_name.singularize.camelize(:lower)}")
747
850
  expect(a1).to include(
748
851
  "id" => be_a(String),
749
- EOS
750
- else
751
- new_line.write <<-EOS
852
+ EOS
853
+ else
854
+ new_line.write <<-EOS
752
855
  }
753
856
  }
754
857
  }
@@ -763,81 +866,82 @@ module Souls
763
866
  a1 = result.dig("data", "create#{class_name.singularize.camelize}", "#{class_name.singularize.camelize(:lower)}")
764
867
  expect(a1).to include(
765
868
  "id" => be_a(String),
766
- EOS
767
- end
768
- break
869
+ EOS
769
870
  end
770
- _, name = line.split(",")[0].gsub("\"", "").scan(/((?<=t\.).+(?=\s)) (.+)/)[0]
771
- array_true = line.include?("array: true")
772
- case name
773
- when "user_id", "created_at", "updated_at"
774
- next
871
+ break
872
+ end
873
+ _, name = line.split(",")[0].gsub("\"", "").scan(/((?<=t\.).+(?=\s)) (.+)/)[0]
874
+ array_true = line.include?("array: true")
875
+ case name
876
+ when "user_id", "created_at", "updated_at", /$*_id\z/
877
+ next
878
+ else
879
+ if array_true
880
+ new_line.write " #{name.pluralize.camelize(:lower)}\n"
775
881
  else
776
- if array_true
777
- new_line.write " #{name.pluralize.camelize(:lower)}\n"
778
- else
779
- new_line.write " #{name.singularize.camelize(:lower)}\n"
780
- end
882
+ new_line.write " #{name.singularize.camelize(:lower)}\n"
781
883
  end
782
884
  end
783
- if table_check(line: line, class_name: class_name)
784
- @on = true
785
- end
885
+ end
886
+ if table_check(line: line, class_name: class_name)
887
+ @on = true
786
888
  end
787
889
  end
788
890
  end
789
891
  end
892
+ end
790
893
 
791
- def rspec_mutation_end class_name: "souls"
792
- file_path = "./spec/mutations/#{class_name.singularize}_spec.rb"
793
- path = "./db/schema.rb"
794
- @on = false
795
- File.open(file_path, "a") do |new_line|
796
- File.open(path, "r") do |f|
797
- f.each_line.with_index do |line, i|
798
- if @on
799
- if line.include?("end") || line.include?("t.index")
800
- new_line.write <<~EOS
801
- )
802
- end
894
+ def rspec_mutation_end class_name: "souls"
895
+ file_path = "./spec/mutations/#{class_name.singularize}_spec.rb"
896
+ path = "./db/schema.rb"
897
+ @on = false
898
+ File.open(file_path, "a") do |new_line|
899
+ File.open(path, "r") do |f|
900
+ f.each_line.with_index do |line, i|
901
+ if @on
902
+ if line.include?("end") || line.include?("t.index")
903
+ new_line.write <<~EOS
904
+ )
803
905
  end
804
906
  end
805
- EOS
806
- break
807
- end
808
- type, name = line.split(",")[0].gsub("\"", "").scan(/((?<=t\.).+(?=\s)) (.+)/)[0]
809
- field ||= type_check type
810
- array_true = line.include?("array: true")
811
- case name
812
- when "user_id", "created_at", "updated_at"
813
- next
814
- else
815
- case type
816
- when "text", "date", "datetime"
817
- if array_true
818
- new_line.write " \"#{name.pluralize.camelize(:lower)}\" => be_all(String),\n"
819
- else
820
- new_line.write " \"#{name.singularize.camelize(:lower)}\" => be_a(String),\n"
821
907
  end
822
- when "boolean"
823
- new_line.write " \"#{name.singularize.camelize(:lower)}\" => be_in([true, false]),\n"
824
- when "string", "bigint", "integer", "float"
825
- new_line.write " \"#{name.singularize.camelize(:lower)}\" => be_a(#{field}),\n"
826
- end
827
- end
908
+ EOS
909
+ break
828
910
  end
829
- if table_check(line: line, class_name: class_name)
830
- @on = true
911
+ type, name = line.split(",")[0].gsub("\"", "").scan(/((?<=t\.).+(?=\s)) (.+)/)[0]
912
+ field ||= type_check type
913
+ array_true = line.include?("array: true")
914
+ case name
915
+ when "user_id", "created_at", "updated_at", /$*_id\z/
916
+ next
917
+ else
918
+ case type
919
+ when "text", "date", "datetime"
920
+ if array_true
921
+ new_line.write " \"#{name.pluralize.camelize(:lower)}\" => be_all(String),\n"
922
+ else
923
+ new_line.write " \"#{name.singularize.camelize(:lower)}\" => be_a(String),\n"
924
+ end
925
+ when "boolean"
926
+ new_line.write " \"#{name.singularize.camelize(:lower)}\" => be_in([true, false]),\n"
927
+ when "string", "bigint", "integer", "float"
928
+ new_line.write " \"#{name.singularize.camelize(:lower)}\" => be_a(#{field}),\n"
929
+ end
831
930
  end
832
931
  end
932
+ if table_check(line: line, class_name: class_name)
933
+ @on = true
934
+ end
833
935
  end
834
936
  end
835
- [file_path]
836
937
  end
938
+ [file_path]
939
+ end
837
940
 
838
941
  def rspec_mutation class_name: "souls"
839
942
  singularized_class_name = class_name.singularize
840
943
  rspec_mutation_head class_name: singularized_class_name
944
+ rspec_mutation_after_head class_name: singularized_class_name
841
945
  rspec_mutation_params class_name: singularized_class_name
842
946
  rspec_mutation_params_response class_name: singularized_class_name
843
947
  rspec_mutation_end class_name: singularized_class_name
@@ -849,109 +953,154 @@ module Souls
849
953
  f.write <<~EOS
850
954
  RSpec.describe \"#{class_name.camelize} Query テスト\" do
851
955
  describe "#{class_name.camelize} データを取得する" do
852
- let!(:#{class_name.singularize.underscore}) { FactoryBot.create(:#{class_name.singularize.underscore}) }
853
-
854
- let(:query) do
855
- data_id = Base64.encode64("#{class_name.camelize}:\#{#{class_name.singularize.underscore}.id}")
856
- %(query {
857
- #{class_name.singularize.camelize(:lower)}(id: \\"\#{data_id}\\") {
858
- id
859
956
  EOS
860
957
  end
861
958
  end
862
959
 
863
- def rspec_query_params class_name: "souls"
864
- file_path = "./spec/queries/#{class_name.singularize}_spec.rb"
865
- path = "./db/schema.rb"
866
- @on = false
867
- File.open(file_path, "a") do |new_line|
868
- File.open(path, "r") do |f|
869
- f.each_line.with_index do |line, i|
870
- if @on
871
- if line.include?("end") || line.include?("t.index")
872
- new_line.write <<-EOS
873
- }
960
+ def rspec_query_after_head class_name: "souls"
961
+ file_path = "./spec/queries/#{class_name.singularize}_spec.rb"
962
+ path = "./db/schema.rb"
963
+ @on = false
964
+ @user_exist = false
965
+ @relation_params = []
966
+ File.open(file_path, "a") do |new_line|
967
+ File.open(path, "r") do |f|
968
+ f.each_line.with_index do |line, i|
969
+ if @on
970
+ if line.include?("end") || line.include?("t.index")
971
+ if @relation_params.empty?
972
+ new_line.write <<-EOS
973
+ let(:#{class_name}) { FactoryBot.create(:#{class_name}) }
974
+
975
+ let(:query) do
976
+ data_id = Base64.encode64("#{class_name.camelize}:\#{#{class_name.singularize.underscore}.id}")
977
+ %(query {
978
+ #{class_name.singularize.camelize(:lower)}(id: \\"\#{data_id}\\") {
979
+ id
980
+ EOS
981
+ break
982
+ else
983
+ new_line.write <<-EOS
984
+ let(:#{class_name}) { FactoryBot.create(:#{class_name}, #{@relation_params.join(", ")}) }
985
+
986
+ let(:query) do
987
+ data_id = Base64.encode64("#{class_name.camelize}:\#{#{class_name.singularize.underscore}.id}")
988
+ %(query {
989
+ #{class_name.singularize.camelize(:lower)}(id: \\"\#{data_id}\\") {
990
+ id
991
+ EOS
992
+ break
993
+ end
994
+ end
995
+ _, name = line.split(",")[0].gsub("\"", "").scan(/((?<=t\.).+(?=\s)) (.+)/)[0]
996
+ case name
997
+ when /$*_id\z/
998
+ relation_col = name.gsub("_id", "")
999
+ @relation_params << "#{name}: #{relation_col}.id"
1000
+ new_line.write " let(:#{relation_col}) { FactoryBot.create(:#{relation_col}) }\n"
1001
+ end
1002
+ end
1003
+ if table_check(line: line, class_name: class_name)
1004
+ @on = true
1005
+ end
1006
+ end
1007
+ end
1008
+ end
1009
+ end
1010
+
1011
+ def rspec_query_params class_name: "souls"
1012
+ file_path = "./spec/queries/#{class_name.singularize}_spec.rb"
1013
+ path = "./db/schema.rb"
1014
+ @on = false
1015
+ File.open(file_path, "a") do |new_line|
1016
+ File.open(path, "r") do |f|
1017
+ f.each_line.with_index do |line, i|
1018
+ if @on
1019
+ if line.include?("end") || line.include?("t.index")
1020
+ new_line.write <<-EOS
874
1021
  }
875
- )
876
- end
1022
+ }
1023
+ )
1024
+ end
877
1025
 
878
- subject(:result) do
879
- SoulsApiSchema.execute(query).as_json
880
- end
1026
+ subject(:result) do
1027
+ SoulsApiSchema.execute(query).as_json
1028
+ end
881
1029
 
882
- it "return #{class_name.camelize} Data" do
883
- a1 = result.dig("data", "#{class_name.singularize.camelize(:lower)}")
884
- expect(a1).to include(
885
- "id" => be_a(String),
886
- EOS
887
- break
888
- end
889
- _, name = line.split(",")[0].gsub("\"", "").scan(/((?<=t\.).+(?=\s)) (.+)/)[0]
890
- case name
891
- when "user_id", "created_at", "updated_at"
892
- next
893
- else
894
- new_line.write " #{name.singularize.camelize(:lower)}\n"
895
- end
1030
+ it "return #{class_name.camelize} Data" do
1031
+ a1 = result.dig("data", "#{class_name.singularize.camelize(:lower)}")
1032
+ expect(a1).to include(
1033
+ "id" => be_a(String),
1034
+ EOS
1035
+ break
896
1036
  end
897
- if table_check(line: line, class_name: class_name)
898
- @on = true
1037
+ _, name = line.split(",")[0].gsub("\"", "").scan(/((?<=t\.).+(?=\s)) (.+)/)[0]
1038
+ case name
1039
+ when "user_id", "created_at", "updated_at", /$*_id\z/
1040
+ next
1041
+ else
1042
+ new_line.write " #{name.singularize.camelize(:lower)}\n"
899
1043
  end
900
1044
  end
1045
+ if table_check(line: line, class_name: class_name)
1046
+ @on = true
1047
+ end
901
1048
  end
902
1049
  end
903
1050
  end
1051
+ end
904
1052
 
905
- def rspec_query_end class_name: "souls"
906
- file_path = "./spec/queries/#{class_name.singularize}_spec.rb"
907
- path = "./db/schema.rb"
908
- @on = false
909
- File.open(file_path, "a") do |new_line|
910
- File.open(path, "r") do |f|
911
- f.each_line.with_index do |line, i|
912
- if @on
913
- if line.include?("end") || line.include?("t.index")
914
- new_line.write <<-EOS
1053
+ def rspec_query_end class_name: "souls"
1054
+ file_path = "./spec/queries/#{class_name.singularize}_spec.rb"
1055
+ path = "./db/schema.rb"
1056
+ @on = false
1057
+ File.open(file_path, "a") do |new_line|
1058
+ File.open(path, "r") do |f|
1059
+ f.each_line.with_index do |line, i|
1060
+ if @on
1061
+ if line.include?("end") || line.include?("t.index")
1062
+ new_line.write <<-EOS
915
1063
  )
916
1064
  end
917
1065
  end
918
1066
  end
919
- EOS
920
- break
921
- end
922
- type, name = line.split(",")[0].gsub("\"", "").scan(/((?<=t\.).+(?=\s)) (.+)/)[0]
923
- field ||= type_check type
924
- array_true = line.include?("array: true")
925
- case name
926
- when "user_id", "created_at", "updated_at"
927
- next
928
- else
929
- case type
930
- when "text", "date", "datetime"
931
- if array_true
932
- new_line.write " \"#{name.singularize.camelize(:lower)}\" => be_all(String),\n"
933
- else
934
- new_line.write " \"#{name.singularize.camelize(:lower)}\" => be_a(String),\n"
935
- end
936
- when "boolean"
937
- new_line.write " \"#{name.singularize.camelize(:lower)}\" => be_in([true, false]),\n"
938
- when "string", "bigint", "integer", "float"
939
- new_line.write " \"#{name.singularize.camelize(:lower)}\" => be_a(#{field}),\n"
940
- end
941
- end
1067
+ EOS
1068
+ break
942
1069
  end
943
- if table_check(line: line, class_name: class_name)
944
- @on = true
1070
+ type, name = line.split(",")[0].gsub("\"", "").scan(/((?<=t\.).+(?=\s)) (.+)/)[0]
1071
+ field ||= type_check type
1072
+ array_true = line.include?("array: true")
1073
+ case name
1074
+ when "user_id", "created_at", "updated_at", /$*_id\z/
1075
+ next
1076
+ else
1077
+ case type
1078
+ when "text", "date", "datetime"
1079
+ if array_true
1080
+ new_line.write " \"#{name.singularize.camelize(:lower)}\" => be_all(String),\n"
1081
+ else
1082
+ new_line.write " \"#{name.singularize.camelize(:lower)}\" => be_a(String),\n"
1083
+ end
1084
+ when "boolean"
1085
+ new_line.write " \"#{name.singularize.camelize(:lower)}\" => be_in([true, false]),\n"
1086
+ when "string", "bigint", "integer", "float"
1087
+ new_line.write " \"#{name.singularize.camelize(:lower)}\" => be_a(#{field}),\n"
1088
+ end
945
1089
  end
946
1090
  end
1091
+ if table_check(line: line, class_name: class_name)
1092
+ @on = true
1093
+ end
947
1094
  end
948
1095
  end
949
- [file_path]
950
1096
  end
1097
+ [file_path]
1098
+ end
951
1099
 
952
1100
  def rspec_query class_name: "souls"
953
1101
  singularized_class_name = class_name.singularize
954
1102
  rspec_query_head class_name: singularized_class_name
1103
+ rspec_query_after_head class_name: singularized_class_name
955
1104
  rspec_query_params class_name: singularized_class_name
956
1105
  rspec_query_end class_name: singularized_class_name
957
1106
  end
data/lib/souls/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Souls
2
- VERSION = "0.13.5"
2
+ VERSION = "0.14.0"
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.5
4
+ version: 0.14.0
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: []