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 +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 +50 -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: 804fd65fe81c6419e3375ccd10cf74b25d6bdcb5e8d2aca7e3b89a3ad5312c42
|
4
|
+
data.tar.gz: 0b52eea2c5519ced9176e0c0004816cbd7b4e899e6b8c694ec8b2477455179b1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0eed1e0504165176a740e77e3d9d0b08154582b5b1aee47a11100d19edfa029002902870028bc669323d748645fbacadb627d92ee79933b3188f2cd813ade606
|
7
|
+
data.tar.gz: 6fcf0db4532e3a59b787e0c673522d2d2ca43e5bda3638799968e86b7664c95c21c2eb391aabbfff14cbb2ad8a4cd9ea89d885f2687824b1fd2a216147c09680
|
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}, 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}
|
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}
|
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
|
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
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.
|
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-
|
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
|