souls 0.14.6 → 0.15.1

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: e7a6884fade54faa35e418f6444d415f53987e106bdcff1dd146078961a4d97a
4
- data.tar.gz: 373db5faf95fdbe73aa504f4f6eab2379e46d47dbb84a77ebbfdbb7912e6cf6e
3
+ metadata.gz: 53de40efd144cd448a857b6137f1769b3666b561682395892440cc469cea45a2
4
+ data.tar.gz: 9a25d0ee2b989d0b43305462c05991e829ace194f34b7ce4b0b52b0271ba425b
5
5
  SHA512:
6
- metadata.gz: d21cbaa2ae78fb42502c9f200277c93e78a92139835e19db3fec551c5d80989497006cef086f93b47caee9118193984b85687c96566c7e90a11c0a7e9588c3a1
7
- data.tar.gz: 9e3f9d3daf4ad77ed04fca0d0f76790d91c7d56156f5317178384e25c5cf58e02256bc203b040a307731c15eaf9b0b18fdee65f0af0d5ed1b8ccafbc3e08388e
6
+ metadata.gz: 578a24022e14528fdfd8809269f69f6b4c02f6c27660ecb9e1d3752861518ffa7150f31a28fa4661cb380ead5cb157b3855b0434efcc471b529946891498c623
7
+ data.tar.gz: 3774afb512a034298bca690f6ffb2d41ae71fd8407d97095409c55488f6d8b86eb2946f587c1e9dc0bdec69f8fe41c8f49882e9d70e7f87d121f182e97616519
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.4)
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}Type, 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 ["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"
@@ -308,7 +312,7 @@ module Souls
308
312
  module Mutations
309
313
  module #{class_name.camelize}
310
314
  class Create#{class_name.camelize} < BaseMutation
311
- field :#{class_name}, Types::#{class_name.camelize}Type, null: false
315
+ field :#{class_name}_edge, Types::#{class_name.camelize}NodeType, null: false
312
316
  field :error, String, null: true
313
317
 
314
318
  EOS
@@ -379,7 +383,7 @@ module Souls
379
383
  new_line.write <<~EOS
380
384
  #{class_name} = ::#{class_name.camelize}.new args
381
385
  if #{class_name}.save
382
- { #{class_name}: #{class_name} }
386
+ { #{class_name}_edge: { node: #{class_name} } }
383
387
  else
384
388
  { error: #{class_name}.errors.full_messages }
385
389
  end
@@ -401,7 +405,7 @@ module Souls
401
405
  module Mutations
402
406
  module #{class_name.camelize}
403
407
  class Update#{class_name.camelize} < BaseMutation
404
- field :#{class_name}, Types::#{class_name.camelize}Type, null: false
408
+ field :#{class_name}_edge, Types::#{class_name.camelize}NodeType, null: false
405
409
 
406
410
  argument :id, String, required: true
407
411
  EOS
@@ -474,7 +478,7 @@ module Souls
474
478
  new_line.write <<~EOS
475
479
  #{class_name} = ::#{class_name.camelize}.find args[:id]
476
480
  #{class_name}.update args
477
- { #{class_name}: ::#{class_name.camelize}.find(args[:id]) }
481
+ { #{class_name}_edge: { node: ::#{class_name.camelize}.find(args[:id]) } }
478
482
  rescue StandardError => error
479
483
  GraphQL::ExecutionError.new error
480
484
  end
@@ -503,6 +507,32 @@ module Souls
503
507
  field :#{class_name}, Types::#{class_name.camelize}Type, null: false
504
508
  argument :id, String, required: true
505
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
+
506
536
  def resolve **args
507
537
  _, data_id = SoulsApiSchema.from_global_id args[:id]
508
538
  #{class_name} = ::#{class_name.camelize}.find data_id
@@ -535,7 +565,8 @@ module Souls
535
565
  [
536
566
  create_mutation_end(class_name: singularized_class_name),
537
567
  update_mutation(class_name: singularized_class_name),
538
- delete_mutation(class_name: singularized_class_name)
568
+ delete_mutation(class_name: singularized_class_name),
569
+ destroy_delete_mutation(class_name: singularized_class_name)
539
570
  ]
540
571
  end
541
572
 
@@ -693,6 +724,7 @@ module Souls
693
724
  end
694
725
 
695
726
  def rspec_factory class_name: "souls"
727
+ return ["Aleady Exist!"] unless File.exist? "./spec/factories/#{class_name.singularize}"
696
728
  singularized_class_name = class_name.singularize
697
729
  rspec_factory_head class_name: singularized_class_name
698
730
  rspec_factory_params class_name: singularized_class_name
@@ -701,6 +733,7 @@ module Souls
701
733
 
702
734
  def rspec_model class_name: "souls"
703
735
  file_path = "./spec/models/#{class_name}_spec.rb"
736
+ return ["Aleady Exist!"] unless File.exist? file_path
704
737
  File.open(file_path, "w") do |f|
705
738
  f.write <<~EOS
706
739
  RSpec.describe "#{class_name.camelize} Model テスト", type: :model do
@@ -788,7 +821,8 @@ module Souls
788
821
  f.each_line.with_index do |line, i|
789
822
  if @on
790
823
  if line.include?("end") || line.include?("t.index")
791
- new_line.write " }) {\n #{class_name.singularize.camelize(:lower)} {\n id\n"
824
+ new_line.write " }) {\n #{class_name.singularize.camelize(:lower)}Edge {\n node {\n"
825
+ new_line.write " id\n"
792
826
  break
793
827
  end
794
828
  type, name = line.split(",")[0].gsub("\"", "").scan(/((?<=t\.).+(?=\s)) (.+)/)[0]
@@ -832,6 +866,7 @@ module Souls
832
866
  if line.include?("end") || line.include?("t.index")
833
867
  if @user_exist
834
868
  new_line.write <<-EOS
869
+ }
835
870
  }
836
871
  }
837
872
  }
@@ -846,12 +881,13 @@ module Souls
846
881
  end
847
882
 
848
883
  it "return #{class_name.camelize} Data" do
849
- a1 = result.dig("data", "create#{class_name.singularize.camelize}", "#{class_name.singularize.camelize(:lower)}")
884
+ a1 = result.dig("data", "create#{class_name.singularize.camelize}", "#{class_name.singularize.camelize(:lower)}Edge", "node")
850
885
  expect(a1).to include(
851
886
  "id" => be_a(String),
852
887
  EOS
853
888
  else
854
889
  new_line.write <<-EOS
890
+ }
855
891
  }
856
892
  }
857
893
  }
@@ -863,7 +899,7 @@ module Souls
863
899
  end
864
900
 
865
901
  it "return #{class_name.camelize} Data" do
866
- a1 = result.dig("data", "create#{class_name.singularize.camelize}", "#{class_name.singularize.camelize(:lower)}")
902
+ a1 = result.dig("data", "create#{class_name.singularize.camelize}", "#{class_name.singularize.camelize(:lower)}Edge", "node")
867
903
  expect(a1).to include(
868
904
  "id" => be_a(String),
869
905
  EOS
@@ -1137,6 +1173,7 @@ end
1137
1173
  singularized_class_name = class_name.singularize
1138
1174
  model_paths = model class_name: singularized_class_name
1139
1175
  type_paths = type class_name: singularized_class_name
1176
+ node_type_paths = node_type class_name: singularized_class_name
1140
1177
  rspec_factory_paths = rspec_factory class_name: singularized_class_name
1141
1178
  rspec_model_paths = rspec_model class_name: singularized_class_name
1142
1179
  rspec_mutation_paths = rspec_mutation class_name: singularized_class_name
@@ -1146,6 +1183,7 @@ end
1146
1183
  [
1147
1184
  model: model_paths,
1148
1185
  type: type_paths,
1186
+ node_type: node_type_paths,
1149
1187
  rspec_factory: rspec_factory_paths,
1150
1188
  rspec_model: rspec_model_paths,
1151
1189
  rspec_mutation: rspec_mutation_paths,
@@ -1159,7 +1197,8 @@ end
1159
1197
  add_mutation_type: [
1160
1198
  " field :create_#{singularized_class_name}, mutation: Mutations::#{singularized_class_name.camelize}::Create#{singularized_class_name.camelize}",
1161
1199
  " field :update_#{singularized_class_name}, mutation: Mutations::#{singularized_class_name.camelize}::Update#{singularized_class_name.camelize}",
1162
- " field :delete_#{singularized_class_name}, mutation: Mutations::#{singularized_class_name.camelize}::Delete#{singularized_class_name.camelize}"
1200
+ " field :delete_#{singularized_class_name}, mutation: Mutations::#{singularized_class_name.camelize}::Delete#{singularized_class_name.camelize}",
1201
+ " field :destroy_delete_#{singularized_class_name}, mutation: Mutations::#{singularized_class_name.camelize}::DestroyDelete#{singularized_class_name.camelize}"
1163
1202
  ]
1164
1203
  ]
1165
1204
  end
@@ -1169,6 +1208,7 @@ end
1169
1208
  result = migrate class_name: class_name
1170
1209
  puts result[0][:model]
1171
1210
  puts result[0][:type]
1211
+ puts result[0][:node_type]
1172
1212
  puts result[0][:rspec_factory]
1173
1213
  puts result[0][:rspec_model]
1174
1214
  puts result[0][:rspec_mutation]
@@ -1218,6 +1258,12 @@ end
1218
1258
  path[:type].each { |line| puts line }
1219
1259
  end
1220
1260
  end
1261
+ puts "\n============== NodeType =======================\n\n"
1262
+ paths.each do |class_name|
1263
+ class_name.each do |path|
1264
+ path[:node_type].each { |line| puts line }
1265
+ end
1266
+ end
1221
1267
  puts "\n============== FactoryBot =================\n\n"
1222
1268
  paths.each do |class_name|
1223
1269
  class_name.each do |path|
data/lib/souls/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Souls
2
- VERSION = "0.14.6"
2
+ VERSION = "0.15.1"
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.6
4
+ version: 0.15.1
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