souls 0.18.2 → 0.20.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of souls might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/.rubocop.yml +3 -0
- data/Gemfile.lock +1 -1
- data/README.md +7 -9
- data/Rakefile +9 -0
- data/exe/souls +30 -32
- data/lib/souls.rb +15 -37
- data/lib/souls/generate/application.rb +156 -0
- data/lib/souls/generate/model.rb +18 -0
- data/lib/souls/generate/mutation.rb +274 -0
- data/lib/souls/generate/policy.rb +50 -0
- data/lib/souls/generate/query.rb +56 -0
- data/lib/souls/generate/resolver.rb +153 -0
- data/lib/souls/generate/rspec_factory.rb +63 -0
- data/lib/souls/generate/rspec_model.rb +23 -0
- data/lib/souls/generate/rspec_mutation.rb +247 -0
- data/lib/souls/generate/rspec_policy.rb +50 -0
- data/lib/souls/generate/rspec_query.rb +169 -0
- data/lib/souls/generate/rspec_resolver.rb +189 -0
- data/lib/souls/generate/type.rb +83 -0
- data/lib/souls/init.rb +0 -1131
- data/lib/souls/version.rb +1 -1
- data/souls.gemspec +1 -1
- metadata +18 -6
- data/lib/souls/generate.rb +0 -520
@@ -0,0 +1,50 @@
|
|
1
|
+
module Souls
|
2
|
+
module Generate
|
3
|
+
class << self
|
4
|
+
## Generate Policy
|
5
|
+
def policy class_name: "souls"
|
6
|
+
dir_name = "./app/policies"
|
7
|
+
FileUtils.mkdir_p dir_name unless Dir.exist? dir_name
|
8
|
+
file_path = "./app/policies/#{class_name.singularize}_policy.rb"
|
9
|
+
File.open(file_path, "w") do |f|
|
10
|
+
f.write <<~EOS
|
11
|
+
class #{class_name.camelize}Policy < ApplicationPolicy
|
12
|
+
def show?
|
13
|
+
admin_permissions?
|
14
|
+
end
|
15
|
+
|
16
|
+
def index?
|
17
|
+
admin_permissions?
|
18
|
+
end
|
19
|
+
|
20
|
+
def create?
|
21
|
+
admin_permissions?
|
22
|
+
end
|
23
|
+
|
24
|
+
def update?
|
25
|
+
admin_permissions?
|
26
|
+
end
|
27
|
+
|
28
|
+
def delete?
|
29
|
+
admin_permissions?
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
def staff_permissions?
|
35
|
+
@user.master? or @user.admin? or @user.staff?
|
36
|
+
end
|
37
|
+
|
38
|
+
def admin_permissions?
|
39
|
+
@user.master? or @user.admin?
|
40
|
+
end
|
41
|
+
end
|
42
|
+
EOS
|
43
|
+
end
|
44
|
+
file_path
|
45
|
+
rescue StandardError => error
|
46
|
+
puts error
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
module Souls
|
2
|
+
module Generate
|
3
|
+
class << self
|
4
|
+
## Generate Query / Queries
|
5
|
+
def create_queries class_name: "souls"
|
6
|
+
file_path = "./app/graphql/queries/#{class_name.pluralize}.rb"
|
7
|
+
File.open(file_path, "w") do |f|
|
8
|
+
f.write <<~EOS
|
9
|
+
module Queries
|
10
|
+
class #{class_name.camelize.pluralize} < Queries::BaseQuery
|
11
|
+
type [Types::#{class_name.camelize}Type], null: false
|
12
|
+
|
13
|
+
def resolve
|
14
|
+
::#{class_name.camelize}.all
|
15
|
+
rescue StandardError => error
|
16
|
+
GraphQL::ExecutionError.new error
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
EOS
|
21
|
+
end
|
22
|
+
file_path
|
23
|
+
end
|
24
|
+
|
25
|
+
def create_query class_name: "souls"
|
26
|
+
file_path = "./app/graphql/queries/#{class_name}.rb"
|
27
|
+
File.open(file_path, "w") do |f|
|
28
|
+
f.write <<~EOS
|
29
|
+
module Queries
|
30
|
+
class #{class_name.camelize} < Queries::BaseQuery
|
31
|
+
type Types::#{class_name.camelize}Type, null: false
|
32
|
+
argument :id, String, required: true
|
33
|
+
|
34
|
+
def resolve **args
|
35
|
+
_, data_id = SoulsApiSchema.from_global_id args[:id]
|
36
|
+
::#{class_name.camelize}.find(data_id)
|
37
|
+
rescue StandardError => error
|
38
|
+
GraphQL::ExecutionError.new error
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
EOS
|
43
|
+
file_path
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def query class_name: "souls"
|
48
|
+
singularized_class_name = class_name.singularize
|
49
|
+
[
|
50
|
+
create_query(class_name: singularized_class_name),
|
51
|
+
create_queries(class_name: singularized_class_name)
|
52
|
+
]
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,153 @@
|
|
1
|
+
module Souls
|
2
|
+
module Generate
|
3
|
+
class << self
|
4
|
+
## Generate Resolver
|
5
|
+
def resolver_head class_name: "souls"
|
6
|
+
FileUtils.mkdir_p "./app/graphql/resolvers" unless Dir.exist? "./app/graphql/resolvers"
|
7
|
+
file_path = "./app/graphql/resolvers/#{class_name.singularize}_search.rb"
|
8
|
+
@relation_params = []
|
9
|
+
return ["Resolver already exist! #{file_path}"] if File.exist? file_path
|
10
|
+
File.open(file_path, "w") do |f|
|
11
|
+
f.write <<~EOS
|
12
|
+
module Resolvers
|
13
|
+
class #{class_name.camelize}Search < Base
|
14
|
+
include SearchObject.module(:graphql)
|
15
|
+
scope { ::#{class_name.camelize}.all }
|
16
|
+
type Types::#{class_name.camelize}Type.connection_type, null: false
|
17
|
+
description "Search #{class_name.camelize}"
|
18
|
+
|
19
|
+
class #{class_name.camelize}Filter < ::Types::BaseInputObject
|
20
|
+
argument :OR, [self], required: false
|
21
|
+
EOS
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def resolver_params class_name: "souls"
|
26
|
+
file_path = "./app/graphql/resolvers/#{class_name.singularize}_search.rb"
|
27
|
+
path = "./db/schema.rb"
|
28
|
+
@on = false
|
29
|
+
@user_exist = false
|
30
|
+
@relation_params = []
|
31
|
+
File.open(file_path, "a") do |new_line|
|
32
|
+
File.open(path, "r") do |f|
|
33
|
+
f.each_line.with_index do |line, i|
|
34
|
+
if @on
|
35
|
+
if line.include?("end") || line.include?("t.index")
|
36
|
+
break
|
37
|
+
end
|
38
|
+
field = "[String]" if line.include?("array: true")
|
39
|
+
type, name = get_type_and_name(line)
|
40
|
+
field ||= type_check type
|
41
|
+
case name
|
42
|
+
when "user_id"
|
43
|
+
@user_exist = true
|
44
|
+
when /$*_id\z/
|
45
|
+
@relation_params << name
|
46
|
+
new_line.write " argument :#{name}, String, required: false\n"
|
47
|
+
when "created_at", "updated_at"
|
48
|
+
next
|
49
|
+
else
|
50
|
+
new_line.write " argument :#{name}, #{field}, required: false\n"
|
51
|
+
end
|
52
|
+
end
|
53
|
+
@on = true if table_check(line: line, class_name: class_name)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
def resolver_after_params class_name: "souls"
|
60
|
+
file_path = "./app/graphql/resolvers/#{class_name.singularize}_search.rb"
|
61
|
+
File.open(file_path, "a") do |f|
|
62
|
+
f.write <<-EOS
|
63
|
+
argument :start_date, String, required: false
|
64
|
+
argument :end_date, String, required: false
|
65
|
+
end
|
66
|
+
|
67
|
+
option :filter, type: #{class_name.camelize}Filter, with: :apply_filter
|
68
|
+
option :first, type: types.Int, with: :apply_first
|
69
|
+
option :skip, type: types.Int, with: :apply_skip
|
70
|
+
|
71
|
+
def apply_filter(scope, value)
|
72
|
+
branches = normalize_filters(value).inject { |a, b| a.or(b) }
|
73
|
+
scope.merge branches
|
74
|
+
end
|
75
|
+
|
76
|
+
def normalize_filters(value, branches = [])
|
77
|
+
scope = ::#{class_name.camelize}.all
|
78
|
+
EOS
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
def resolver_before_end class_name: "souls"
|
83
|
+
file_path = "./app/graphql/resolvers/#{class_name.singularize}_search.rb"
|
84
|
+
path = "./db/schema.rb"
|
85
|
+
@on = false
|
86
|
+
@user_exist = false
|
87
|
+
@relation_params = []
|
88
|
+
File.open(file_path, "a") do |new_line|
|
89
|
+
File.open(path, "r") do |f|
|
90
|
+
f.each_line.with_index do |line, i|
|
91
|
+
if @on
|
92
|
+
if line.include?("end") || line.include?("t.index")
|
93
|
+
break
|
94
|
+
end
|
95
|
+
type, name = get_type_and_name(line)
|
96
|
+
if line.include?("array: true")
|
97
|
+
new_line.write " scope = scope.where(\"#{name} @> ARRAY[?]::text[]\", value[:#{name}]) if value[:#{name}]\n"
|
98
|
+
next
|
99
|
+
end
|
100
|
+
case name
|
101
|
+
when "user_id"
|
102
|
+
@user_exist = true
|
103
|
+
when /$*_id\z/
|
104
|
+
@relation_params << name
|
105
|
+
new_line.write " scope = scope.where(#{name}: decode_global_key(value[:#{name}])) if value[:#{name}]\n"
|
106
|
+
when "created_at", "updated_at"
|
107
|
+
next
|
108
|
+
else
|
109
|
+
case type
|
110
|
+
when "boolean"
|
111
|
+
new_line.write " scope = scope.where(#{name}: value[:#{name}]) unless value[:#{name}].nil?\n"
|
112
|
+
else
|
113
|
+
new_line.write " scope = scope.where(#{name}: value[:#{name}]) if value[:#{name}]\n"
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|
117
|
+
@on = true if table_check(line: line, class_name: class_name)
|
118
|
+
end
|
119
|
+
end
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
def resolver_end class_name: "souls"
|
124
|
+
file_path = "./app/graphql/resolvers/#{class_name.singularize}_search.rb"
|
125
|
+
File.open(file_path, "a") do |f|
|
126
|
+
f.write <<~EOS
|
127
|
+
scope = scope.where("created_at >= ?", value[:start_date]) if value[:start_date]
|
128
|
+
scope = scope.where("created_at <= ?", value[:end_date]) if value[:end_date]
|
129
|
+
#{' '}
|
130
|
+
branches << scope
|
131
|
+
#{' '}
|
132
|
+
value[:OR].inject(branches) { |s, v| normalize_filters(v, s) } if value[:OR].present?
|
133
|
+
#{' '}
|
134
|
+
branches
|
135
|
+
end
|
136
|
+
end
|
137
|
+
end
|
138
|
+
EOS
|
139
|
+
end
|
140
|
+
file_path
|
141
|
+
end
|
142
|
+
|
143
|
+
def resolver class_name: "souls"
|
144
|
+
singularized_class_name = class_name.singularize.underscore
|
145
|
+
resolver_head class_name: singularized_class_name
|
146
|
+
resolver_params class_name: singularized_class_name
|
147
|
+
resolver_after_params class_name: singularized_class_name
|
148
|
+
resolver_before_end class_name: singularized_class_name
|
149
|
+
resolver_end class_name: singularized_class_name
|
150
|
+
end
|
151
|
+
end
|
152
|
+
end
|
153
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
module Souls
|
2
|
+
module Generate
|
3
|
+
class << self
|
4
|
+
## Generate Rspec Factory
|
5
|
+
def rspec_factory_head class_name: "souls"
|
6
|
+
file_path = "./spec/factories/#{class_name.pluralize}.rb"
|
7
|
+
File.open(file_path, "w") do |f|
|
8
|
+
f.write <<~EOS
|
9
|
+
FactoryBot.define do
|
10
|
+
factory :#{class_name} do
|
11
|
+
EOS
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def rspec_factory_params class_name: "souls"
|
16
|
+
file_path = "./spec/factories/#{class_name.pluralize}.rb"
|
17
|
+
path = "./db/schema.rb"
|
18
|
+
@on = false
|
19
|
+
File.open(file_path, "a") do |new_line|
|
20
|
+
File.open(path, "r") do |f|
|
21
|
+
f.each_line.with_index do |line, i|
|
22
|
+
if @on
|
23
|
+
new_line.write "\n" && break if line.include?("end") || line.include?("t.index")
|
24
|
+
field = '["tag1", "tag2", "tag3"]' if line.include?("array: true")
|
25
|
+
type, name = line.split(",")[0].gsub("\"", "").scan(/((?<=t\.).+(?=\s)) (.+)/)[0]
|
26
|
+
field ||= get_test_type type
|
27
|
+
if type == "bigint" && name.include?("_id")
|
28
|
+
id_name = name.gsub("_id", "")
|
29
|
+
new_line.write " association :#{id_name}, factory: :#{id_name}\n"
|
30
|
+
else
|
31
|
+
new_line.write " #{name} { #{field} }\n"
|
32
|
+
end
|
33
|
+
end
|
34
|
+
if table_check(line: line, class_name: class_name)
|
35
|
+
@on = true
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
def rspec_factory_end class_name: "souls"
|
43
|
+
file_path = "./spec/factories/#{class_name.pluralize}.rb"
|
44
|
+
File.open(file_path, "a") do |f|
|
45
|
+
f.write <<~EOS
|
46
|
+
end
|
47
|
+
end
|
48
|
+
EOS
|
49
|
+
end
|
50
|
+
file_path
|
51
|
+
end
|
52
|
+
|
53
|
+
def rspec_factory class_name: "souls"
|
54
|
+
file_path = "./spec/factories/#{class_name.pluralize}.rb"
|
55
|
+
return ["Factory aleady exist! #{file_path}"] if File.exist? file_path
|
56
|
+
singularized_class_name = class_name.singularize
|
57
|
+
rspec_factory_head class_name: singularized_class_name
|
58
|
+
rspec_factory_params class_name: singularized_class_name
|
59
|
+
rspec_factory_end class_name: singularized_class_name
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Souls
|
2
|
+
module Generate
|
3
|
+
class << self
|
4
|
+
## Generate Rspec Model
|
5
|
+
def rspec_model class_name: "souls"
|
6
|
+
file_path = "./spec/models/#{class_name}_spec.rb"
|
7
|
+
return ["Aleady Exist!"] if File.exist? file_path
|
8
|
+
File.open(file_path, "w") do |f|
|
9
|
+
f.write <<~EOS
|
10
|
+
RSpec.describe "#{class_name.camelize} Model テスト", type: :model do
|
11
|
+
describe "#{class_name.camelize} データを書き込む" do
|
12
|
+
it "valid #{class_name.camelize} Model" do
|
13
|
+
expect(FactoryBot.build(:#{class_name.singularize})).to be_valid
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
EOS
|
18
|
+
end
|
19
|
+
file_path
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,247 @@
|
|
1
|
+
module Souls
|
2
|
+
module Generate
|
3
|
+
class << self
|
4
|
+
## Generate Rspec Mutation
|
5
|
+
def rspec_mutation_head class_name: "souls"
|
6
|
+
file_path = "./spec/mutations/#{class_name.singularize}_spec.rb"
|
7
|
+
File.open(file_path, "w") do |f|
|
8
|
+
f.write <<~EOS
|
9
|
+
RSpec.describe \"#{class_name.camelize} Mutation テスト\" do
|
10
|
+
describe "#{class_name.camelize} データを登録する" do
|
11
|
+
EOS
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def rspec_mutation_after_head class_name: "souls"
|
16
|
+
file_path = "./spec/mutations/#{class_name.singularize}_spec.rb"
|
17
|
+
path = "./db/schema.rb"
|
18
|
+
@on = false
|
19
|
+
@user_exist = false
|
20
|
+
@relation_params = []
|
21
|
+
File.open(file_path, "a") do |new_line|
|
22
|
+
File.open(path, "r") do |f|
|
23
|
+
f.each_line.with_index do |line, i|
|
24
|
+
if @on
|
25
|
+
if line.include?("end") || line.include?("t.index")
|
26
|
+
if @relation_params.empty?
|
27
|
+
new_line.write <<-EOS
|
28
|
+
let(:#{class_name}) { FactoryBot.attributes_for(:#{class_name}) }
|
29
|
+
|
30
|
+
let(:mutation) do
|
31
|
+
%(mutation {
|
32
|
+
create#{class_name.camelize}(input: {
|
33
|
+
EOS
|
34
|
+
else
|
35
|
+
new_line.write <<-EOS
|
36
|
+
let(:#{class_name}) { FactoryBot.attributes_for(:#{class_name}, #{@relation_params.join(", ")}) }
|
37
|
+
|
38
|
+
let(:mutation) do
|
39
|
+
%(mutation {
|
40
|
+
create#{class_name.camelize}(input: {
|
41
|
+
EOS
|
42
|
+
end
|
43
|
+
break
|
44
|
+
end
|
45
|
+
_, name = line.split(",")[0].gsub("\"", "").scan(/((?<=t\.).+(?=\s)) (.+)/)[0]
|
46
|
+
case name
|
47
|
+
when "user_id"
|
48
|
+
relation_col = name.gsub("_id", "")
|
49
|
+
new_line.write " let(:#{relation_col}) { FactoryBot.create(:#{relation_col}) }\n"
|
50
|
+
when /$*_id\z/
|
51
|
+
relation_col = name.gsub("_id", "")
|
52
|
+
@relation_params << "#{name}: get_global_key(\"#{name.singularize.camelize.gsub("Id", "")}\", #{relation_col}.id)"
|
53
|
+
new_line.write " let(:#{relation_col}) { FactoryBot.create(:#{relation_col}) }\n"
|
54
|
+
end
|
55
|
+
end
|
56
|
+
if table_check(line: line, class_name: class_name)
|
57
|
+
@on = true
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
def rspec_mutation_params class_name: "souls"
|
65
|
+
file_path = "./spec/mutations/#{class_name.singularize}_spec.rb"
|
66
|
+
path = "./db/schema.rb"
|
67
|
+
@on = false
|
68
|
+
@user_exist = false
|
69
|
+
File.open(file_path, "a") do |new_line|
|
70
|
+
File.open(path, "r") do |f|
|
71
|
+
f.each_line.with_index do |line, i|
|
72
|
+
if @on
|
73
|
+
if line.include?("end") || line.include?("t.index")
|
74
|
+
new_line.write " }) {\n #{class_name.singularize.camelize(:lower)}Edge {\n node {\n"
|
75
|
+
new_line.write " id\n"
|
76
|
+
break
|
77
|
+
end
|
78
|
+
type, name = line.split(",")[0].gsub("\"", "").scan(/((?<=t\.).+(?=\s)) (.+)/)[0]
|
79
|
+
array_true = line.include?("array: true")
|
80
|
+
case name
|
81
|
+
when "created_at", "updated_at"
|
82
|
+
next
|
83
|
+
when "user_id"
|
84
|
+
@user_exist = true
|
85
|
+
when /$*_id\z/
|
86
|
+
new_line.write " #{name.singularize.camelize(:lower)}: \"\#{#{class_name.singularize}[:#{name.singularize.underscore}]}\"\n"
|
87
|
+
else
|
88
|
+
case type
|
89
|
+
when "string", "text", "date", "datetime"
|
90
|
+
if array_true
|
91
|
+
new_line.write " #{name.pluralize.camelize(:lower)}: \#{#{class_name.singularize}[:#{name.pluralize.underscore}]}\n"
|
92
|
+
else
|
93
|
+
new_line.write " #{name.singularize.camelize(:lower)}: \"\#{#{class_name.singularize}[:#{name.singularize.underscore}]}\"\n"
|
94
|
+
end
|
95
|
+
when "bigint", "integer", "float", "boolean"
|
96
|
+
new_line.write " #{name.singularize.camelize(:lower)}: \#{#{class_name.singularize}[:#{name.singularize.underscore}]}\n"
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
if table_check(line: line, class_name: class_name)
|
101
|
+
@on = true
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
def rspec_mutation_params_response class_name: "souls"
|
109
|
+
file_path = "./spec/mutations/#{class_name.singularize}_spec.rb"
|
110
|
+
path = "./db/schema.rb"
|
111
|
+
@on = false
|
112
|
+
File.open(file_path, "a") do |new_line|
|
113
|
+
File.open(path, "r") do |f|
|
114
|
+
f.each_line.with_index do |line, i|
|
115
|
+
if @on
|
116
|
+
if line.include?("end") || line.include?("t.index")
|
117
|
+
if @user_exist
|
118
|
+
new_line.write <<-EOS
|
119
|
+
}
|
120
|
+
}
|
121
|
+
}
|
122
|
+
}
|
123
|
+
)
|
124
|
+
end
|
125
|
+
|
126
|
+
subject(:result) do
|
127
|
+
context = {
|
128
|
+
user: user
|
129
|
+
}
|
130
|
+
SoulsApiSchema.execute(mutation, context: context).as_json
|
131
|
+
end
|
132
|
+
|
133
|
+
it "return #{class_name.camelize} Data" do
|
134
|
+
begin
|
135
|
+
a1 = result.dig("data", "create#{class_name.singularize.camelize}", "#{class_name.singularize.camelize(:lower)}Edge", "node")
|
136
|
+
raise unless a1.present?
|
137
|
+
rescue
|
138
|
+
raise StandardError, result
|
139
|
+
end
|
140
|
+
expect(a1).to include(
|
141
|
+
"id" => be_a(String),
|
142
|
+
EOS
|
143
|
+
else
|
144
|
+
new_line.write <<-EOS
|
145
|
+
}
|
146
|
+
}
|
147
|
+
}
|
148
|
+
}
|
149
|
+
)
|
150
|
+
end
|
151
|
+
|
152
|
+
subject(:result) do
|
153
|
+
SoulsApiSchema.execute(mutation).as_json
|
154
|
+
end
|
155
|
+
|
156
|
+
it "return #{class_name.camelize} Data" do
|
157
|
+
begin
|
158
|
+
a1 = result.dig("data", "create#{class_name.singularize.camelize}", "#{class_name.singularize.camelize(:lower)}Edge", "node")
|
159
|
+
raise unless a1.present?
|
160
|
+
rescue
|
161
|
+
raise StandardError, result
|
162
|
+
end
|
163
|
+
expect(a1).to include(
|
164
|
+
"id" => be_a(String),
|
165
|
+
EOS
|
166
|
+
end
|
167
|
+
break
|
168
|
+
end
|
169
|
+
_, name = line.split(",")[0].gsub("\"", "").scan(/((?<=t\.).+(?=\s)) (.+)/)[0]
|
170
|
+
array_true = line.include?("array: true")
|
171
|
+
case name
|
172
|
+
when "user_id", "created_at", "updated_at", /$*_id\z/
|
173
|
+
next
|
174
|
+
else
|
175
|
+
if array_true
|
176
|
+
new_line.write " #{name.pluralize.camelize(:lower)}\n"
|
177
|
+
else
|
178
|
+
new_line.write " #{name.singularize.camelize(:lower)}\n"
|
179
|
+
end
|
180
|
+
end
|
181
|
+
end
|
182
|
+
if table_check(line: line, class_name: class_name)
|
183
|
+
@on = true
|
184
|
+
end
|
185
|
+
end
|
186
|
+
end
|
187
|
+
end
|
188
|
+
end
|
189
|
+
|
190
|
+
def rspec_mutation_end class_name: "souls"
|
191
|
+
file_path = "./spec/mutations/#{class_name.singularize}_spec.rb"
|
192
|
+
path = "./db/schema.rb"
|
193
|
+
@on = false
|
194
|
+
File.open(file_path, "a") do |new_line|
|
195
|
+
File.open(path, "r") do |f|
|
196
|
+
f.each_line.with_index do |line, i|
|
197
|
+
if @on
|
198
|
+
if line.include?("end") || line.include?("t.index")
|
199
|
+
new_line.write <<~EOS
|
200
|
+
)
|
201
|
+
end
|
202
|
+
end
|
203
|
+
end
|
204
|
+
EOS
|
205
|
+
break
|
206
|
+
end
|
207
|
+
type, name = line.split(",")[0].gsub("\"", "").scan(/((?<=t\.).+(?=\s)) (.+)/)[0]
|
208
|
+
field ||= type_check type
|
209
|
+
array_true = line.include?("array: true")
|
210
|
+
case name
|
211
|
+
when "user_id", "created_at", "updated_at", /$*_id\z/
|
212
|
+
next
|
213
|
+
else
|
214
|
+
case type
|
215
|
+
when "text", "date", "datetime"
|
216
|
+
if array_true
|
217
|
+
new_line.write " \"#{name.pluralize.camelize(:lower)}\" => be_all(String),\n"
|
218
|
+
else
|
219
|
+
new_line.write " \"#{name.singularize.camelize(:lower)}\" => be_a(String),\n"
|
220
|
+
end
|
221
|
+
when "boolean"
|
222
|
+
new_line.write " \"#{name.singularize.camelize(:lower)}\" => be_in([true, false]),\n"
|
223
|
+
when "string", "bigint", "integer", "float"
|
224
|
+
new_line.write " \"#{name.singularize.camelize(:lower)}\" => be_a(#{field}),\n"
|
225
|
+
end
|
226
|
+
end
|
227
|
+
end
|
228
|
+
if table_check(line: line, class_name: class_name)
|
229
|
+
@on = true
|
230
|
+
end
|
231
|
+
end
|
232
|
+
end
|
233
|
+
end
|
234
|
+
file_path
|
235
|
+
end
|
236
|
+
|
237
|
+
def rspec_mutation class_name: "souls"
|
238
|
+
singularized_class_name = class_name.singularize
|
239
|
+
rspec_mutation_head class_name: singularized_class_name
|
240
|
+
rspec_mutation_after_head class_name: singularized_class_name
|
241
|
+
rspec_mutation_params class_name: singularized_class_name
|
242
|
+
rspec_mutation_params_response class_name: singularized_class_name
|
243
|
+
rspec_mutation_end class_name: singularized_class_name
|
244
|
+
end
|
245
|
+
end
|
246
|
+
end
|
247
|
+
end
|