souls 0.14.3 → 0.14.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: 6d23a325d465a04acf398abbe43f7b437a2bf80b9f9d6781e7dce9e6d2869e3f
4
- data.tar.gz: 0461a1b6872078e0c2df3e63376676c1158d928df2058ed72598b077b95bc789
3
+ metadata.gz: 804fd65fe81c6419e3375ccd10cf74b25d6bdcb5e8d2aca7e3b89a3ad5312c42
4
+ data.tar.gz: 0b52eea2c5519ced9176e0c0004816cbd7b4e899e6b8c694ec8b2477455179b1
5
5
  SHA512:
6
- metadata.gz: 6fb6c07afbc8dbc4652e77e4ef65d414e1a4041dddc72bf71e8b8ce54cad84cbf450bda3e4f5876dadb5ebdc63993de280c29648aafe575c0d603ea10054b985
7
- data.tar.gz: 518118fef287de1dfcf33b7fcf9a9bdfac97d6c470337640bb6d72562f01bdbee6c02a682c6e7044a7d74f8e7d5ded67bdde98a96d8cd57537f82bee5663bdc1
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.2)
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"
@@ -62,7 +66,7 @@ begin
62
66
  when "migrate_all"
63
67
  Souls::Init.migrate_all
64
68
  when "migration"
65
- `rake db:create_migration NAME=#{ARGV[3]}`
69
+ `rake db:create_migration NAME=#{ARGV[2]}`
66
70
  when "rspec_factory"
67
71
  Souls::Init.rspec_factory class_name: ARGV[2]
68
72
  when "rspec_model"
@@ -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
@@ -244,6 +244,7 @@ module Souls
244
244
 
245
245
  def model class_name: "souls"
246
246
  file_path = "./app/models/#{class_name.singularize}.rb"
247
+ return p("Model already exist! #{file_path}") if File.exist? file_path
247
248
  File.open(file_path, "w") do |f|
248
249
  f.write <<~EOS
249
250
  class #{class_name.camelize} < ActiveRecord::Base
@@ -257,6 +258,9 @@ module Souls
257
258
  FileUtils.mkdir_p "./app/graphql/mutations"
258
259
  FileUtils.mkdir_p "./app/graphql/queries"
259
260
  FileUtils.mkdir_p "./app/graphql/types"
261
+ FileUtils.mkdir_p "./app/graphql/resolvers"
262
+ FileUtils.mkdir_p "./app/jobs"
263
+ FileUtils.mkdir_p "./app/models"
260
264
  FileUtils.mkdir_p "./spec/factories"
261
265
  FileUtils.mkdir_p "./spec/queries"
262
266
  FileUtils.mkdir_p "./spec/mutations"
@@ -300,13 +304,15 @@ module Souls
300
304
  end
301
305
 
302
306
  def create_mutation_head class_name: "souls"
307
+ dir_name = "./app/graphql/mutations/#{class_name}"
308
+ FileUtils.mkdir_p dir_name unless Dir.exist? dir_name
303
309
  file_path = "./app/graphql/mutations/#{class_name}/create_#{class_name}.rb"
304
310
  File.open(file_path, "w") do |new_line|
305
311
  new_line.write <<~EOS
306
312
  module Mutations
307
313
  module #{class_name.camelize}
308
314
  class Create#{class_name.camelize} < BaseMutation
309
- field :#{class_name}, Types::#{class_name.camelize}Type, null: false
315
+ field :#{class_name}_edge, Types::#{class_name.camelize}NodeType, null: false
310
316
  field :error, String, null: true
311
317
 
312
318
  EOS
@@ -377,7 +383,7 @@ module Souls
377
383
  new_line.write <<~EOS
378
384
  #{class_name} = ::#{class_name.camelize}.new args
379
385
  if #{class_name}.save
380
- { #{class_name}: #{class_name} }
386
+ { #{class_name}_edge: { node: #{class_name} } }
381
387
  else
382
388
  { error: #{class_name}.errors.full_messages }
383
389
  end
@@ -399,7 +405,7 @@ module Souls
399
405
  module Mutations
400
406
  module #{class_name.camelize}
401
407
  class Update#{class_name.camelize} < BaseMutation
402
- field :#{class_name}, Types::#{class_name.camelize}Type, null: false
408
+ field :#{class_name}_edge, Types::#{class_name.camelize}NodeType, null: false
403
409
 
404
410
  argument :id, String, required: true
405
411
  EOS
@@ -472,7 +478,7 @@ module Souls
472
478
  new_line.write <<~EOS
473
479
  #{class_name} = ::#{class_name.camelize}.find args[:id]
474
480
  #{class_name}.update args
475
- { #{class_name}: ::#{class_name.camelize}.find(args[:id]) }
481
+ { #{class_name}_edge: { node: ::#{class_name.camelize}.find(args[:id]) } }
476
482
  rescue StandardError => error
477
483
  GraphQL::ExecutionError.new error
478
484
  end
@@ -501,6 +507,32 @@ module Souls
501
507
  field :#{class_name}, Types::#{class_name.camelize}Type, null: false
502
508
  argument :id, String, required: true
503
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
+
504
536
  def resolve **args
505
537
  _, data_id = SoulsApiSchema.from_global_id args[:id]
506
538
  #{class_name} = ::#{class_name.camelize}.find data_id
@@ -526,18 +558,15 @@ module Souls
526
558
 
527
559
  def mutation class_name: "souls"
528
560
  singularized_class_name = class_name.singularize
529
- if Dir.exist? "./app/graphql/mutations/#{singularized_class_name}"
530
- create_confirm dir_path: "./app/graphql/mutations/#{singularized_class_name}"
531
- else
532
- Dir.mkdir "./app/graphql/mutations/#{singularized_class_name}"
533
- end
561
+
534
562
  create_mutation_head class_name: singularized_class_name
535
563
  relation_params = create_mutation_params class_name: singularized_class_name
536
564
  create_mutation_after_params class_name: singularized_class_name, relation_params: relation_params
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.3"
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.3
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-02 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