souls 0.51.1 → 0.52.2

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.
Files changed (62) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +4 -1
  3. data/exe/souls +3 -200
  4. data/lib/souls/api/generate/application.rb +97 -94
  5. data/lib/souls/api/generate/connection.rb +5 -4
  6. data/lib/souls/api/generate/edge.rb +5 -4
  7. data/lib/souls/api/generate/index.rb +0 -1
  8. data/lib/souls/api/generate/manager.rb +9 -7
  9. data/lib/souls/api/generate/model.rb +16 -18
  10. data/lib/souls/api/generate/mutation.rb +217 -218
  11. data/lib/souls/api/generate/policy.rb +5 -5
  12. data/lib/souls/api/generate/query.rb +51 -51
  13. data/lib/souls/api/generate/resolver.rb +115 -115
  14. data/lib/souls/api/generate/rspec_factory.rb +53 -53
  15. data/lib/souls/api/generate/rspec_model.rb +5 -5
  16. data/lib/souls/api/generate/rspec_mutation.rb +178 -178
  17. data/lib/souls/api/generate/rspec_policy.rb +5 -5
  18. data/lib/souls/api/generate/rspec_query.rb +111 -111
  19. data/lib/souls/api/generate/rspec_resolver.rb +163 -163
  20. data/lib/souls/api/generate/type.rb +66 -66
  21. data/lib/souls/api/index.rb +7 -4
  22. data/lib/souls/api/update/index.rb +15 -0
  23. data/lib/souls/api/update/mutation.rb +68 -64
  24. data/lib/souls/api/update/resolver.rb +59 -60
  25. data/lib/souls/api/update/rspec_factory.rb +40 -39
  26. data/lib/souls/api/update/rspec_mutation.rb +84 -83
  27. data/lib/souls/api/update/rspec_resolver.rb +70 -69
  28. data/lib/souls/api/update/type.rb +39 -38
  29. data/lib/souls/cli/console/index.rb +13 -1
  30. data/lib/souls/cli/create/index.rb +98 -94
  31. data/lib/souls/cli/db/index.rb +122 -1
  32. data/lib/souls/cli/docker/index.rb +30 -38
  33. data/lib/souls/cli/gcloud/compute/index.rb +100 -98
  34. data/lib/souls/cli/gcloud/iam/index.rb +84 -69
  35. data/lib/souls/cli/gcloud/index.rb +36 -35
  36. data/lib/souls/cli/gcloud/pubsub/subscriptions.rb +40 -27
  37. data/lib/souls/cli/gcloud/pubsub/topics.rb +16 -10
  38. data/lib/souls/cli/gcloud/run/index.rb +23 -17
  39. data/lib/souls/cli/gcloud/sql/index.rb +66 -47
  40. data/lib/souls/cli/index.rb +3 -20
  41. data/lib/souls/cli/init/index.rb +140 -140
  42. data/lib/souls/cli/release/release.rb +106 -105
  43. data/lib/souls/cli/server/index.rb +12 -1
  44. data/lib/souls/cli/sync/conf.rb +39 -38
  45. data/lib/souls/cli/sync/model.rb +19 -20
  46. data/lib/souls/cli/sync/pubsub.rb +69 -70
  47. data/lib/souls/cli/upgrade/gemfile.rb +108 -0
  48. data/lib/souls/cli/upgrade/index.rb +1 -1
  49. data/lib/souls/cli.rb +57 -0
  50. data/lib/souls/index.rb +1 -5
  51. data/lib/souls/version.rb +1 -1
  52. data/lib/souls/versions/.souls_api_version +1 -1
  53. data/lib/souls/versions/.souls_worker_version +1 -1
  54. data/lib/souls/worker/generate/index.rb +1 -1
  55. data/lib/souls/worker/generate/job.rb +45 -0
  56. data/lib/souls/worker/generate/mailer.rb +38 -43
  57. data/lib/souls/worker/index.rb +3 -1
  58. data/lib/souls.rb +2 -0
  59. metadata +19 -5
  60. data/lib/souls/api/generate/migration.rb +0 -51
  61. data/lib/souls/cli/upgrade/gem_update.rb +0 -107
  62. data/lib/souls/worker/generate/mutation.rb +0 -44
@@ -1,81 +1,81 @@
1
1
  module Souls
2
- module Api::Generate
3
- class << self
4
- ## Generate Type
5
- def create_type_head(class_name: "user")
6
- file_dir = "./app/graphql/types/"
7
- FileUtils.mkdir_p(file_dir) unless Dir.exist?(file_dir)
8
- file_path = "./app/graphql/types/#{class_name}_type.rb"
9
- File.open(file_path, "w") do |f|
10
- f.write(<<~TEXT)
11
- module Types
12
- class #{class_name.camelize}Type < BaseObject
13
- implements GraphQL::Types::Relay::Node
2
+ class Generate < Thor
3
+ desc "type [CLASS_NAME]", "Generate GraphQL Type from schema.rb"
4
+ def type(class_name)
5
+ singularized_class_name = class_name.singularize
6
+ file_path = "./app/graphql/types/#{singularized_class_name}_type.rb"
7
+ return "Type already exist! #{file_path}" if File.exist?(file_path)
14
8
 
15
- TEXT
16
- end
9
+ create_type_head(class_name: singularized_class_name)
10
+ create_type_params(class_name: singularized_class_name)
11
+ create_type_end(class_name: singularized_class_name)
12
+ puts(Paint % ["Created file! : %{white_text}", :green, { white_text: [file_path.to_s, :white] }])
13
+ file_path
14
+ rescue Thor::Error => e
15
+ raise(Thor::Error, e)
16
+ end
17
+
18
+ private
19
+
20
+ def create_type_head(class_name: "user")
21
+ file_dir = "./app/graphql/types/"
22
+ FileUtils.mkdir_p(file_dir) unless Dir.exist?(file_dir)
23
+ file_path = "./app/graphql/types/#{class_name}_type.rb"
24
+ File.open(file_path, "w") do |f|
25
+ f.write(<<~TEXT)
26
+ module Types
27
+ class #{class_name.camelize}Type < BaseObject
28
+ implements GraphQL::Types::Relay::Node
29
+
30
+ TEXT
17
31
  end
32
+ end
18
33
 
19
- def create_type_params(class_name: "user")
20
- file_path = "./app/graphql/types/#{class_name}_type.rb"
21
- path = "./db/schema.rb"
22
- @on = false
23
- File.open(file_path, "a") do |new_line|
24
- File.open(path, "r") do |f|
25
- f.each_line.with_index do |line, _i|
26
- if @on
27
- new_line.write("\n" && break) if line.include?("t.index") || line.strip == "end"
28
- field = "[String]" if line.include?("array: true")
29
- type, name = line.split(",")[0].gsub("\"", "").scan(/((?<=t\.).+(?=\s)) (.+)/)[0]
30
- field ||= Souls.type_check(type)
31
- case name
32
- when /$*_id\z/
33
- new_line.write(
34
- " field :#{name.gsub(
35
- '_id',
36
- ''
37
- )}, Types::#{name.gsub(
38
- '_id',
39
- ''
40
- ).singularize.camelize}Type, null: false\n"
41
- )
42
- else
43
- new_line.write(" field :#{name}, #{field}, null: true\n")
44
- end
45
- end
46
- if Souls.table_check(line: line, class_name: class_name)
47
- @on = true
48
- new_line.write(" global_id_field :id\n")
34
+ def create_type_params(class_name: "user")
35
+ file_path = "./app/graphql/types/#{class_name}_type.rb"
36
+ path = "./db/schema.rb"
37
+ @on = false
38
+ File.open(file_path, "a") do |new_line|
39
+ File.open(path, "r") do |f|
40
+ f.each_line.with_index do |line, _i|
41
+ if @on
42
+ new_line.write("\n" && break) if line.include?("t.index") || line.strip == "end"
43
+ field = "[String]" if line.include?("array: true")
44
+ type, name = line.split(",")[0].gsub("\"", "").scan(/((?<=t\.).+(?=\s)) (.+)/)[0]
45
+ field ||= Souls.type_check(type)
46
+ case name
47
+ when /$*_id\z/
48
+ new_line.write(
49
+ " field :#{name.gsub(
50
+ '_id',
51
+ ''
52
+ )}, Types::#{name.gsub(
53
+ '_id',
54
+ ''
55
+ ).singularize.camelize}Type, null: false\n"
56
+ )
57
+ else
58
+ new_line.write(" field :#{name}, #{field}, null: true\n")
49
59
  end
50
60
  end
61
+ if Souls.table_check(line: line, class_name: class_name)
62
+ @on = true
63
+ new_line.write(" global_id_field :id\n")
64
+ end
51
65
  end
52
66
  end
53
67
  end
68
+ end
54
69
 
55
- def create_type_end(class_name: "user")
56
- file_path = "./app/graphql/types/#{class_name}_type.rb"
57
- File.open(file_path, "a") do |f|
58
- f.write(<<~TEXT)
59
- end
70
+ def create_type_end(class_name: "user")
71
+ file_path = "./app/graphql/types/#{class_name}_type.rb"
72
+ File.open(file_path, "a") do |f|
73
+ f.write(<<~TEXT)
60
74
  end
61
- TEXT
62
- end
63
- file_path
64
- end
65
-
66
- def type(class_name: "user")
67
- singularized_class_name = class_name.singularize
68
- file_path = "./app/graphql/types/#{singularized_class_name}_type.rb"
69
- return "Type already exist! #{file_path}" if File.exist?(file_path)
70
-
71
- create_type_head(class_name: singularized_class_name)
72
- create_type_params(class_name: singularized_class_name)
73
- create_type_end(class_name: singularized_class_name)
74
- puts(Paint % ["Created file! : %{white_text}", :green, { white_text: [file_path.to_s, :white] }])
75
- file_path
76
- rescue StandardError => e
77
- raise(StandardError, e)
75
+ end
76
+ TEXT
78
77
  end
78
+ file_path
79
79
  end
80
80
  end
81
81
  end
@@ -1,10 +1,13 @@
1
1
  require_relative "./generate/index"
2
2
  require_relative "./update/index"
3
-
4
3
  module Souls
5
- module Api::Generate
6
- end
4
+ class API < Thor
5
+ desc "generate [COMMAND]", "souls api generate Commands"
6
+ subcommand "generate", Generate
7
+
8
+ desc "update [COMMAND]", "souls api update Commands"
9
+ subcommand "update", Update
7
10
 
8
- module Api::Update
11
+ map "g" => :generate
9
12
  end
10
13
  end
@@ -4,3 +4,18 @@ require_relative "./type"
4
4
  require_relative "./rspec_factory"
5
5
  require_relative "./rspec_mutation"
6
6
  require_relative "./rspec_resolver"
7
+
8
+ module Souls
9
+ class Update < Thor
10
+ desc "scaffold [CLASS_NAME]", "Update Scaffold Params"
11
+ def scaffold(_class_name)
12
+ invoke(:create_mutation)
13
+ invoke(:update_mutation)
14
+ invoke(:resolver)
15
+ invoke(:type)
16
+ invoke(:rspec_factory)
17
+ invoke(:rspec_mutation)
18
+ invoke(:rspec_resolver)
19
+ end
20
+ end
21
+ end
@@ -1,82 +1,86 @@
1
1
  module Souls
2
- module Api
3
- module Update
4
- class << self
5
- def create_mutation(class_name: "user")
6
- singularized_class_name = class_name.singularize.underscore
7
- new_cols = Souls.get_columns_num(class_name: singularized_class_name)
8
- dir_name = "./app/graphql/mutations/base/#{singularized_class_name}"
9
- new_file_path = "tmp/create_mutation.rb"
10
- file_path = "#{dir_name}/create_#{singularized_class_name}.rb"
11
- argument = false
12
- File.open(file_path) do |f|
13
- File.open(new_file_path, "w") do |new_line|
14
- f.each_line do |line|
15
- new_line.write(line)
16
- next unless line.include?("argument") && !argument
2
+ class Update < Thor
3
+ desc "create_mutation [CLASS_NAME]", "Update GraphQL Type from schema.rb"
4
+ def create_mutation(class_name)
5
+ singularized_class_name = class_name.singularize.underscore
6
+ new_cols = Souls.get_columns_num(class_name: singularized_class_name)
7
+ dir_name = "./app/graphql/mutations/base/#{singularized_class_name}"
8
+ new_file_path = "tmp/create_mutation.rb"
9
+ file_path = "#{dir_name}/create_#{singularized_class_name}.rb"
10
+ argument = false
11
+ File.open(file_path) do |f|
12
+ File.open(new_file_path, "w") do |new_line|
13
+ f.each_line do |line|
14
+ new_line.write(line)
15
+ next unless line.include?("argument") && !argument
17
16
 
18
- new_cols.each do |col|
19
- type = Souls.type_check(col[:type])
20
- type = "[#{type}]" if col[:array]
21
- args = check_mutation_argument(class_name: class_name)
22
- next if args.include?(col[:column_name])
23
- next if col[:column_name] == "created_at" || col[:column_name] == "updated_at"
17
+ new_cols.each do |col|
18
+ type = Souls.type_check(col[:type])
19
+ type = "[#{type}]" if col[:array]
20
+ args = check_mutation_argument(class_name: class_name)
21
+ next if args.include?(col[:column_name])
22
+ next if col[:column_name] == "created_at" || col[:column_name] == "updated_at"
24
23
 
25
- new_line.write(" argument :#{col[:column_name]}, #{type}, required: false\n")
26
- end
27
- argument = true
28
- end
24
+ new_line.write(" argument :#{col[:column_name]}, #{type}, required: false\n")
29
25
  end
26
+ argument = true
30
27
  end
31
- FileUtils.rm(file_path)
32
- FileUtils.mv(new_file_path, file_path)
33
- puts(Paint % ["Updated file! : %{white_text}", :green, { white_text: [file_path.to_s, :white] }])
34
28
  end
29
+ end
30
+ FileUtils.rm(file_path)
31
+ FileUtils.mv(new_file_path, file_path)
32
+ puts(Paint % ["Updated file! : %{white_text}", :green, { white_text: [file_path.to_s, :white] }])
33
+ rescue Thor::Error => e
34
+ raise(Thor::Error, e)
35
+ end
35
36
 
36
- def update_mutation(class_name: "user")
37
- singularized_class_name = class_name.singularize.underscore
38
- new_cols = Souls.get_columns_num(class_name: singularized_class_name)
39
- dir_name = "./app/graphql/mutations/base/#{singularized_class_name}"
40
- new_file_path = "tmp/update_mutation.rb"
41
- file_path = "#{dir_name}/update_#{singularized_class_name}.rb"
42
- argument = false
43
- File.open(file_path) do |f|
44
- File.open(new_file_path, "w") do |new_line|
45
- f.each_line do |line|
46
- new_line.write(line)
47
- next unless line.include?("argument") && !argument
37
+ desc "update_mutation [CLASS_NAME]", "Update GraphQL Type from schema.rb"
38
+ def update_mutation(class_name)
39
+ singularized_class_name = class_name.singularize.underscore
40
+ new_cols = Souls.get_columns_num(class_name: singularized_class_name)
41
+ dir_name = "./app/graphql/mutations/base/#{singularized_class_name}"
42
+ new_file_path = "tmp/update_mutation.rb"
43
+ file_path = "#{dir_name}/update_#{singularized_class_name}.rb"
44
+ argument = false
45
+ File.open(file_path) do |f|
46
+ File.open(new_file_path, "w") do |new_line|
47
+ f.each_line do |line|
48
+ new_line.write(line)
49
+ next unless line.include?("argument") && !argument
48
50
 
49
- new_cols.each do |col|
50
- type = Souls.type_check(col[:type])
51
- type = "[#{type}]" if col[:array]
52
- args = check_mutation_argument(class_name: class_name, action: "update")
53
- next if args.include?(col[:column_name])
54
- next if col[:column_name] == "created_at" || col[:column_name] == "updated_at"
51
+ new_cols.each do |col|
52
+ type = Souls.type_check(col[:type])
53
+ type = "[#{type}]" if col[:array]
54
+ args = check_mutation_argument(class_name: class_name, action: "update")
55
+ next if args.include?(col[:column_name])
56
+ next if col[:column_name] == "created_at" || col[:column_name] == "updated_at"
55
57
 
56
- new_line.write(" argument :#{col[:column_name]}, #{type}, required: false\n")
57
- end
58
- argument = true
59
- end
58
+ new_line.write(" argument :#{col[:column_name]}, #{type}, required: false\n")
60
59
  end
60
+ argument = true
61
61
  end
62
- FileUtils.rm(file_path)
63
- FileUtils.mv(new_file_path, file_path)
64
- puts(Paint % ["Updated file! : %{white_text}", :green, { white_text: [file_path.to_s, :white] }])
65
62
  end
63
+ end
64
+ FileUtils.rm(file_path)
65
+ FileUtils.mv(new_file_path, file_path)
66
+ puts(Paint % ["Updated file! : %{white_text}", :green, { white_text: [file_path.to_s, :white] }])
67
+ rescue Thor::Error => e
68
+ raise(Thor::Error, e)
69
+ end
66
70
 
67
- def check_mutation_argument(class_name: "user", action: "create")
68
- singularized_class_name = class_name.singularize.underscore
69
- dir_name = "./app/graphql/mutations/base/#{singularized_class_name}"
70
- file_path = "#{dir_name}/#{action}_#{singularized_class_name}.rb"
71
- args = []
72
- File.open(file_path) do |f|
73
- f.each_line do |line|
74
- args << line.split(",")[0].gsub("argument :", "").strip.underscore if line.include?("argument")
75
- end
76
- end
77
- args
71
+ private
72
+
73
+ def check_mutation_argument(class_name: "user", action: "create")
74
+ singularized_class_name = class_name.singularize.underscore
75
+ dir_name = "./app/graphql/mutations/base/#{singularized_class_name}"
76
+ file_path = "#{dir_name}/#{action}_#{singularized_class_name}.rb"
77
+ args = []
78
+ File.open(file_path) do |f|
79
+ f.each_line do |line|
80
+ args << line.split(",")[0].gsub("argument :", "").strip.underscore if line.include?("argument")
78
81
  end
79
82
  end
83
+ args
80
84
  end
81
85
  end
82
86
  end
@@ -1,74 +1,73 @@
1
1
  module Souls
2
- module Api
3
- module Update
4
- class << self
5
- def resolver(class_name: "user")
6
- singularized_class_name = class_name.singularize.underscore
7
- new_cols = Souls.get_columns_num(class_name: singularized_class_name)
8
- dir_name = "./app/graphql/resolvers"
9
- new_file_path = "tmp/update_resolver.rb"
10
- file_path = "#{dir_name}/#{singularized_class_name}_search.rb"
11
- args = check_resolver_argument(class_name: class_name)
12
- scope_args = check_resolver_argument(class_name: class_name, action: "scope")
13
- argument = false
14
- scope = false
15
- File.open(file_path) do |f|
16
- File.open(new_file_path, "w") do |new_line|
17
- f.each_line do |line|
18
- new_line.write(line)
19
- if line.include?("argument") && !argument
20
- new_cols.each do |col|
21
- type = Souls.type_check(col[:type])
22
- type = "[#{type}]" if col[:array]
23
- add_line = " argument :#{col[:column_name]}, #{type}, required: false\n"
24
- new_line.write(add_line) unless args.include?(col[:column_name])
25
- end
26
- argument = true
27
- elsif line.include?("scope = ::") && !scope
28
- new_cols.each do |col|
29
- type = Souls.type_check(col[:type])
30
- type = "[#{type}]" if col[:array]
2
+ class Update < Thor
3
+ desc "resolver [CLASS_NAME]", "Update GraphQL Type from schema.rb"
4
+ def resolver(class_name)
5
+ singularized_class_name = class_name.singularize.underscore
6
+ new_cols = Souls.get_columns_num(class_name: singularized_class_name)
7
+ dir_name = "./app/graphql/resolvers"
8
+ new_file_path = "tmp/update_resolver.rb"
9
+ file_path = "#{dir_name}/#{singularized_class_name}_search.rb"
10
+ args = check_resolver_argument(class_name: class_name)
11
+ scope_args = check_resolver_argument(class_name: class_name, action: "scope")
12
+ argument = false
13
+ scope = false
14
+ File.open(file_path) do |f|
15
+ File.open(new_file_path, "w") do |new_line|
16
+ f.each_line do |line|
17
+ new_line.write(line)
18
+ if line.include?("argument") && !argument
19
+ new_cols.each do |col|
20
+ type = Souls.type_check(col[:type])
21
+ type = "[#{type}]" if col[:array]
22
+ add_line = " argument :#{col[:column_name]}, #{type}, required: false\n"
23
+ new_line.write(add_line) unless args.include?(col[:column_name])
24
+ end
25
+ argument = true
26
+ elsif line.include?("scope = ::") && !scope
27
+ new_cols.each do |col|
28
+ type = Souls.type_check(col[:type])
29
+ type = "[#{type}]" if col[:array]
31
30
 
32
- if type.include?("[")
33
- add_line = " scope = scope.where('#{col[:column_name]} @> ARRAY[?]::#{col[:type]}[]', value[:#{col[:column_name]}]) if value[:#{col[:column_name]}]\n"
34
- else
35
- add_line = " scope = scope.where(#{col[:column_name]}: value[:#{col[:column_name]}]) if value[:#{col[:column_name]}]\n"
36
- end
37
- new_line.write(add_line) unless scope_args.include?(col[:column_name])
38
- end
39
- scope = true
31
+ if type.include?("[")
32
+ add_line = " scope = scope.where('#{col[:column_name]} @> ARRAY[?]::#{col[:type]}[]', value[:#{col[:column_name]}]) if value[:#{col[:column_name]}]\n"
33
+ else
34
+ add_line = " scope = scope.where(#{col[:column_name]}: value[:#{col[:column_name]}]) if value[:#{col[:column_name]}]\n"
40
35
  end
36
+ new_line.write(add_line) unless scope_args.include?(col[:column_name])
41
37
  end
38
+ scope = true
42
39
  end
43
40
  end
44
- FileUtils.rm(file_path)
45
- FileUtils.mv(new_file_path, file_path)
46
- puts(Paint % ["Updated file! : %{white_text}", :green, { white_text: [file_path.to_s, :white] }])
47
- rescue StandardError => e
48
- p(e)
49
41
  end
42
+ end
43
+ FileUtils.rm(file_path)
44
+ FileUtils.mv(new_file_path, file_path)
45
+ puts(Paint % ["Updated file! : %{white_text}", :green, { white_text: [file_path.to_s, :white] }])
46
+ rescue Thor::Error => e
47
+ raise(Thor::Error, e)
48
+ end
50
49
 
51
- def check_resolver_argument(class_name: "user", action: "argument")
52
- singularized_class_name = class_name.singularize.underscore
53
- dir_name = "./app/graphql/resolvers"
54
- file_path = "#{dir_name}/#{singularized_class_name}_search.rb"
55
- args = []
56
- File.open(file_path) do |f|
57
- f.each_line do |line|
58
- if action == "scope" && line.include?("scope = scope.where")
59
- args << if line.include?("is_deleted")
60
- "is_deleted"
61
- else
62
- line.to_s.match(/if value\[:(.+)\]/)[1].underscore
63
- end
64
- elsif action == "argument" && line.include?("argument")
65
- args << line.split(",")[0].gsub("argument :", "").strip.underscore
66
- end
67
- end
50
+ private
51
+
52
+ def check_resolver_argument(class_name: "user", action: "argument")
53
+ singularized_class_name = class_name.singularize.underscore
54
+ dir_name = "./app/graphql/resolvers"
55
+ file_path = "#{dir_name}/#{singularized_class_name}_search.rb"
56
+ args = []
57
+ File.open(file_path) do |f|
58
+ f.each_line do |line|
59
+ if action == "scope" && line.include?("scope = scope.where")
60
+ args << if line.include?("is_deleted")
61
+ "is_deleted"
62
+ else
63
+ line.to_s.match(/if value\[:(.+)\]/)[1].underscore
64
+ end
65
+ elsif action == "argument" && line.include?("argument")
66
+ args << line.split(",")[0].gsub("argument :", "").strip.underscore
68
67
  end
69
- args
70
68
  end
71
69
  end
70
+ args
72
71
  end
73
72
  end
74
73
  end