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 +4 -4
- data/Gemfile +1 -1
- data/Gemfile.lock +2 -2
- data/exe/souls +11 -1
- data/lib/souls.rb +1 -0
- data/lib/souls/generate.rb +98 -0
- data/lib/souls/init.rb +55 -9
- data/lib/souls/version.rb +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 53de40efd144cd448a857b6137f1769b3666b561682395892440cc469cea45a2
|
4
|
+
data.tar.gz: 9a25d0ee2b989d0b43305462c05991e829ace194f34b7ce4b0b52b0271ba425b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 578a24022e14528fdfd8809269f69f6b4c02f6c27660ecb9e1d3752861518ffa7150f31a28fa4661cb380ead5cb157b3855b0434efcc471b529946891498c623
|
7
|
+
data.tar.gz: 3774afb512a034298bca690f6ffb2d41ae71fd8407d97095409c55488f6d8b86eb2946f587c1e9dc0bdec69f8fe41c8f49882e9d70e7f87d121f182e97616519
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
souls (0.14.
|
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.
|
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.
|
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
@@ -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}
|
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}
|
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
|
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
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.
|
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-
|
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
|