souls 0.14.7 → 0.14.8

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 82a93c134d59e41d907e30a4784bc6d0713d20ec016e606b49f957aa699e1e82
4
- data.tar.gz: 663dd3215bf74f74fa17e6178a4afface0c4a173334519c4e27af210261716f2
3
+ metadata.gz: 804fd65fe81c6419e3375ccd10cf74b25d6bdcb5e8d2aca7e3b89a3ad5312c42
4
+ data.tar.gz: 0b52eea2c5519ced9176e0c0004816cbd7b4e899e6b8c694ec8b2477455179b1
5
5
  SHA512:
6
- metadata.gz: 182ee54e370af1f746a45613aeb1c78604701a2ac075e7de9e58e211ed8028a0a75dcc4ab0fddce1f870a17392c14a7fc0e1aede1bdc6d8c37bdf4e107457d23
7
- data.tar.gz: d91eab772bd9ec65a0844df7fb363171a2a02c76d9300c60087c37fcc75a26d188e067ae36526d9401c09793aacbe16c46bb6968dc126884ef0ad7ea5649b93a
6
+ metadata.gz: 0eed1e0504165176a740e77e3d9d0b08154582b5b1aee47a11100d19edfa029002902870028bc669323d748645fbacadb627d92ee79933b3188f2cd813ade606
7
+ data.tar.gz: 6fcf0db4532e3a59b787e0c673522d2d2ca43e5bda3638799968e86b7664c95c21c2eb391aabbfff14cbb2ad8a4cd9ea89d885f2687824b1fd2a216147c09680
data/Gemfile CHANGED
@@ -6,5 +6,5 @@ gemspec
6
6
  gem "activesupport", "6.1.0"
7
7
  gem "rake", "13.0.3"
8
8
  gem "rspec", "3.1.0"
9
+ gem "rubocop", "1.7.0"
9
10
  gem "steep", "0.39.0"
10
- gem "rubocop", "1.7.0"
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- souls (0.14.6)
4
+ souls (0.14.7)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -19,7 +19,7 @@ GEM
19
19
  concurrent-ruby (1.1.8)
20
20
  diff-lcs (1.4.4)
21
21
  ffi (1.14.2)
22
- i18n (1.8.7)
22
+ i18n (1.8.8)
23
23
  concurrent-ruby (~> 1.0)
24
24
  language_server-protocol (3.15.0.1)
25
25
  listen (3.4.1)
data/exe/souls CHANGED
@@ -48,7 +48,11 @@ begin
48
48
  when "test_dir"
49
49
  Souls::Init.test_dir
50
50
  when "test"
51
- Souls::Init.single_migrate class_name: "user"
51
+ Souls::Init.node_type class_name: "user"
52
+ when "resolver"
53
+ Souls::Init.resolver class_name: "user"
54
+ when "job"
55
+ Souls::Init.job class_name: "user"
52
56
  when "model"
53
57
  Souls::Init.model class_name: ARGV[2]
54
58
  when "mutation"
@@ -76,6 +80,12 @@ begin
76
80
  else
77
81
  "SOULs!"
78
82
  end
83
+ when "db:create"
84
+ `rake db:create && rake db:create RACK_ENV=test`
85
+ when "db:migrate"
86
+ `rake db:migrate && rake db:migrate RACK_ENV=test`
87
+ when "db:migrate:reset"
88
+ `rake db:migrate:reset && rake db:migrate:reset RACK_ENV=test`
79
89
  when "t", "test"
80
90
  `rubocop`
81
91
  `bundle exec rspec`
data/lib/souls.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  require "souls/version"
2
2
  require "souls/init"
3
+ require "souls/generate"
3
4
  require "json"
4
5
  require "active_support/core_ext/string/inflections"
5
6
  require "fileutils"
@@ -0,0 +1,98 @@
1
+ module Souls
2
+ module Init
3
+ class << self
4
+ def node_type class_name: "souls"
5
+ file_path = "./app/graphql/types/#{class_name.singularize}_node_type.rb"
6
+ File.open(file_path, "w") do |f|
7
+ f.write <<~EOS
8
+ module Types
9
+ class #{class_name.camelize}NodeType < GraphQL::Schema::Object
10
+ field :node, Types::#{class_name.camelize}, null: true
11
+ end
12
+ end
13
+ EOS
14
+ end
15
+ [file_path]
16
+ end
17
+
18
+ def resolver class_name: "souls"
19
+ FileUtils.mkdir_p "./app/graphql/resolvers" unless Dir.exist? "./app/graphql/resolvers"
20
+ file_path = "./app/graphql/resolvers/#{class_name.singularize}_search.rb"
21
+ File.open(file_path, "w") do |f|
22
+ f.write <<~EOS
23
+ module Resolvers
24
+ class #{class_name.camelize}Search < Base
25
+ include SearchObject.module(:graphql)
26
+ scope { ::#{class_name.camelize}.all }
27
+ type Types::#{class_name.camelize}Type.connection_type, null: false
28
+ description "Search #{class_name.camelize}"
29
+
30
+ class #{class_name.camelize}Filter < ::Types::BaseInputObject
31
+ argument :OR, [self], required: false
32
+
33
+ argument :start_date, String, required: false
34
+ argument :end_date, String, required: false
35
+ end
36
+
37
+ option :filter, type: #{class_name.camelize}Filter, with: :apply_filter
38
+ option :first, type: types.Int, with: :apply_first
39
+ option :skip, type: types.Int, with: :apply_skip
40
+
41
+ def apply_filter(scope, value)
42
+ branches = normalize_filters(value).inject { |a, b| a.or(b) }
43
+ scope.merge branches
44
+ end
45
+
46
+ def apply_first(scope, value)
47
+ scope.limit(value)
48
+ end
49
+
50
+ def apply_skip(scope, value)
51
+ scope.offset(value)
52
+ end
53
+
54
+ def decode_global_key id
55
+ _, data_id = SoulsApiSchema.from_global_id id
56
+ data_id
57
+ end
58
+
59
+ def normalize_filters(value, branches = [])
60
+ scope = ::Article.all
61
+
62
+ scope = scope.where("created_at >= ?", value[:start_date]) if value[:start_date]
63
+ scope = scope.where("created_at <= ?", value[:end_date]) if value[:end_date]
64
+
65
+ branches << scope
66
+
67
+ value[:OR].inject(branches) { |s, v| normalize_filters(v, s) } if value[:OR].present?
68
+
69
+ branches
70
+ end
71
+ end
72
+ end
73
+ EOS
74
+ end
75
+ [file_path]
76
+ end
77
+
78
+ def job class_name: "send_mail"
79
+ file_path = "./app/jobs/#{class_name.singularize}_job.rb"
80
+ File.open(file_path, "w") do |f|
81
+ f.write <<~EOS
82
+ class #{class_name.camelize}
83
+ include Sidekiq::Status::Worker
84
+ include Sidekiq::Worker
85
+ sidekiq_options queue: "default"
86
+
87
+ def perform **args
88
+ # write task code here
89
+ end
90
+ end
91
+ EOS
92
+ end
93
+ [file_path]
94
+ end
95
+
96
+ end
97
+ end
98
+ end
data/lib/souls/init.rb CHANGED
@@ -258,6 +258,8 @@ module Souls
258
258
  FileUtils.mkdir_p "./app/graphql/mutations"
259
259
  FileUtils.mkdir_p "./app/graphql/queries"
260
260
  FileUtils.mkdir_p "./app/graphql/types"
261
+ FileUtils.mkdir_p "./app/graphql/resolvers"
262
+ FileUtils.mkdir_p "./app/jobs"
261
263
  FileUtils.mkdir_p "./app/models"
262
264
  FileUtils.mkdir_p "./spec/factories"
263
265
  FileUtils.mkdir_p "./spec/queries"
@@ -310,7 +312,7 @@ module Souls
310
312
  module Mutations
311
313
  module #{class_name.camelize}
312
314
  class Create#{class_name.camelize} < BaseMutation
313
- field :#{class_name}, Types::#{class_name.camelize}Type, null: false
315
+ field :#{class_name}_edge, Types::#{class_name.camelize}NodeType, null: false
314
316
  field :error, String, null: true
315
317
 
316
318
  EOS
@@ -381,7 +383,7 @@ module Souls
381
383
  new_line.write <<~EOS
382
384
  #{class_name} = ::#{class_name.camelize}.new args
383
385
  if #{class_name}.save
384
- { #{class_name}: #{class_name} }
386
+ { #{class_name}_edge: { node: #{class_name} } }
385
387
  else
386
388
  { error: #{class_name}.errors.full_messages }
387
389
  end
@@ -403,7 +405,7 @@ module Souls
403
405
  module Mutations
404
406
  module #{class_name.camelize}
405
407
  class Update#{class_name.camelize} < BaseMutation
406
- field :#{class_name}, Types::#{class_name.camelize}Type, null: false
408
+ field :#{class_name}_edge, Types::#{class_name.camelize}NodeType, null: false
407
409
 
408
410
  argument :id, String, required: true
409
411
  EOS
@@ -476,7 +478,7 @@ module Souls
476
478
  new_line.write <<~EOS
477
479
  #{class_name} = ::#{class_name.camelize}.find args[:id]
478
480
  #{class_name}.update args
479
- { #{class_name}: ::#{class_name.camelize}.find(args[:id]) }
481
+ { #{class_name}_edge: { node: ::#{class_name.camelize}.find(args[:id]) } }
480
482
  rescue StandardError => error
481
483
  GraphQL::ExecutionError.new error
482
484
  end
@@ -505,6 +507,32 @@ module Souls
505
507
  field :#{class_name}, Types::#{class_name.camelize}Type, null: false
506
508
  argument :id, String, required: true
507
509
 
510
+ def resolve **args
511
+ _, data_id = SoulsApiSchema.from_global_id args[:id]
512
+ #{class_name} = ::#{class_name.camelize}.find data_id
513
+ #{class_name}.update(is_deleted: true)
514
+ { #{class_name}: ::#{class_name.camelize}.find(data_id) }
515
+ rescue StandardError => error
516
+ GraphQL::ExecutionError.new error
517
+ end
518
+ end
519
+ end
520
+ end
521
+ EOS
522
+ end
523
+ file_path
524
+ end
525
+
526
+ def destroy_delete_mutation class_name: "souls"
527
+ file_path = "./app/graphql/mutations/#{class_name}/destroy_delete_#{class_name}.rb"
528
+ File.open(file_path, "w") do |f|
529
+ f.write <<~EOS
530
+ module Mutations
531
+ module #{class_name.camelize}
532
+ class DestroyDelete#{class_name.camelize} < BaseMutation
533
+ field :#{class_name}, Types::#{class_name.camelize}Type, null: false
534
+ argument :id, String, required: true
535
+
508
536
  def resolve **args
509
537
  _, data_id = SoulsApiSchema.from_global_id args[:id]
510
538
  #{class_name} = ::#{class_name.camelize}.find data_id
@@ -537,7 +565,8 @@ module Souls
537
565
  [
538
566
  create_mutation_end(class_name: singularized_class_name),
539
567
  update_mutation(class_name: singularized_class_name),
540
- delete_mutation(class_name: singularized_class_name)
568
+ delete_mutation(class_name: singularized_class_name),
569
+ destroy_delete_mutation(class_name: singularized_class_name)
541
570
  ]
542
571
  end
543
572
 
@@ -790,7 +819,8 @@ module Souls
790
819
  f.each_line.with_index do |line, i|
791
820
  if @on
792
821
  if line.include?("end") || line.include?("t.index")
793
- new_line.write " }) {\n #{class_name.singularize.camelize(:lower)} {\n id\n"
822
+ new_line.write " }) {\n #{class_name.singularize.camelize(:lower)}Edge {\n node {\n"
823
+ new_line.write " id\n"
794
824
  break
795
825
  end
796
826
  type, name = line.split(",")[0].gsub("\"", "").scan(/((?<=t\.).+(?=\s)) (.+)/)[0]
@@ -834,6 +864,7 @@ module Souls
834
864
  if line.include?("end") || line.include?("t.index")
835
865
  if @user_exist
836
866
  new_line.write <<-EOS
867
+ }
837
868
  }
838
869
  }
839
870
  }
@@ -848,7 +879,7 @@ module Souls
848
879
  end
849
880
 
850
881
  it "return #{class_name.camelize} Data" do
851
- a1 = result.dig("data", "create#{class_name.singularize.camelize}", "#{class_name.singularize.camelize(:lower)}")
882
+ a1 = result.dig("data", "create#{class_name.singularize.camelize}", "#{class_name.singularize.camelize(:lower)}Edge", "node")
852
883
  expect(a1).to include(
853
884
  "id" => be_a(String),
854
885
  EOS
@@ -865,7 +896,7 @@ module Souls
865
896
  end
866
897
 
867
898
  it "return #{class_name.camelize} Data" do
868
- a1 = result.dig("data", "create#{class_name.singularize.camelize}", "#{class_name.singularize.camelize(:lower)}")
899
+ a1 = result.dig("data", "create#{class_name.singularize.camelize}", "#{class_name.singularize.camelize(:lower)}Edge", "node")
869
900
  expect(a1).to include(
870
901
  "id" => be_a(String),
871
902
  EOS
@@ -1139,6 +1170,7 @@ end
1139
1170
  singularized_class_name = class_name.singularize
1140
1171
  model_paths = model class_name: singularized_class_name
1141
1172
  type_paths = type class_name: singularized_class_name
1173
+ node_type_paths = node_type class_name: singularized_class_name
1142
1174
  rspec_factory_paths = rspec_factory class_name: singularized_class_name
1143
1175
  rspec_model_paths = rspec_model class_name: singularized_class_name
1144
1176
  rspec_mutation_paths = rspec_mutation class_name: singularized_class_name
@@ -1148,6 +1180,7 @@ end
1148
1180
  [
1149
1181
  model: model_paths,
1150
1182
  type: type_paths,
1183
+ node_type: node_type_paths,
1151
1184
  rspec_factory: rspec_factory_paths,
1152
1185
  rspec_model: rspec_model_paths,
1153
1186
  rspec_mutation: rspec_mutation_paths,
@@ -1161,7 +1194,8 @@ end
1161
1194
  add_mutation_type: [
1162
1195
  " field :create_#{singularized_class_name}, mutation: Mutations::#{singularized_class_name.camelize}::Create#{singularized_class_name.camelize}",
1163
1196
  " field :update_#{singularized_class_name}, mutation: Mutations::#{singularized_class_name.camelize}::Update#{singularized_class_name.camelize}",
1164
- " field :delete_#{singularized_class_name}, mutation: Mutations::#{singularized_class_name.camelize}::Delete#{singularized_class_name.camelize}"
1197
+ " field :delete_#{singularized_class_name}, mutation: Mutations::#{singularized_class_name.camelize}::Delete#{singularized_class_name.camelize}",
1198
+ " field :destroy_delete_#{singularized_class_name}, mutation: Mutations::#{singularized_class_name.camelize}::DestroyDelete#{singularized_class_name.camelize}"
1165
1199
  ]
1166
1200
  ]
1167
1201
  end
@@ -1171,6 +1205,7 @@ end
1171
1205
  result = migrate class_name: class_name
1172
1206
  puts result[0][:model]
1173
1207
  puts result[0][:type]
1208
+ puts result[0][:node_type]
1174
1209
  puts result[0][:rspec_factory]
1175
1210
  puts result[0][:rspec_model]
1176
1211
  puts result[0][:rspec_mutation]
@@ -1220,6 +1255,12 @@ end
1220
1255
  path[:type].each { |line| puts line }
1221
1256
  end
1222
1257
  end
1258
+ puts "\n============== NodeType =======================\n\n"
1259
+ paths.each do |class_name|
1260
+ class_name.each do |path|
1261
+ path[:node_type].each { |line| puts line }
1262
+ end
1263
+ end
1223
1264
  puts "\n============== FactoryBot =================\n\n"
1224
1265
  paths.each do |class_name|
1225
1266
  class_name.each do |path|
data/lib/souls/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Souls
2
- VERSION = "0.14.7"
2
+ VERSION = "0.14.8"
3
3
  end
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.14.7
4
+ version: 0.14.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-02-04 00:00:00.000000000 Z
13
+ date: 2021-02-12 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.
@@ -43,6 +43,7 @@ files:
43
43
  - config/initializers/souls.rb
44
44
  - exe/souls
45
45
  - lib/souls.rb
46
+ - lib/souls/generate.rb
46
47
  - lib/souls/init.rb
47
48
  - lib/souls/version.rb
48
49
  - rbs/init.rbs