souls 0.8.1 → 0.8.6

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: c2f7f929b1640d3a618f6244944f72ff08a1fc51136d1bb276a4c19a24bc0076
4
- data.tar.gz: df57c53de699968a8e0d781803fc0627b04ef94d29f0eecb82f51e9ff736dd50
3
+ metadata.gz: 87b717736b09f7fb0d8c595800e4beb6ab622b8664b6fba6391ee94b45f6ed3d
4
+ data.tar.gz: b112ea068f7dea6fc23f1f417b8e61e52b87fe35056f26bc5a5f950071efa147
5
5
  SHA512:
6
- metadata.gz: b14c6586602a8fc1745b50c11564936d896bd5b34996edf552d82a22a69cbebc1d926625974f1a9dd4f908dd2e3efe82144521cdec277e08d439fb268aeec4a8
7
- data.tar.gz: 33d4ed28ecb5fa0260f50c964ac7669dc1f6294ab8caefea5923b1148c172e4c8f453bc01d9d926bc4b9a6efff2e6cc972f77fc6b9a5967e7a41d96917313a4b
6
+ metadata.gz: 4bfb79e0fc7f341a3e9b05be8a3649d377a49e8af4d749dbbf156e0e06ff3c6dec9b2dba29d09428aee716a132d924baa9d1f6f7859542a575fc5fd9713a305b
7
+ data.tar.gz: 893e1f5cbe6d46a581f08681eb13b9e6b1caadc5ce3b921b2294db5e8518ce0e6658a637331edf43120747152c3e2af188e13913be0fdf83533b544dd347e3d5
data/.gitignore CHANGED
@@ -11,4 +11,7 @@
11
11
  .rspec_status
12
12
  /config/keyfile.json
13
13
  .env
14
- .irb_history
14
+ .irb_history
15
+ /spec/
16
+ /app/
17
+
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- souls (0.8.1)
4
+ souls (0.8.5)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -1,13 +1,14 @@
1
1
  Souls.configure do |config|
2
- config.project_id = "el-quest"
3
- config.app = "el-quest"
4
- config.namespace = "souls"
5
- config.service_name = "blog-service"
6
- config.network = "elsoul"
7
- config.machine_type = "elsoul"
8
- config.zone = "elsoul"
9
- config.domain = "elsoul"
10
- config.google_application_credentials = "./config/credentials.json"
11
- config.strain = "service"
2
+ config.main_project_id = ""
3
+ config.project_id = ""
4
+ config.app = "souls"
5
+ config.namespace = ""
6
+ config.service_name = ""
7
+ config.network = ""
8
+ config.machine_type = ""
9
+ config.zone = ""
10
+ config.domain = ""
11
+ config.google_application_credentials = ""
12
+ config.strain = ""
12
13
  config.proto_package_name = "souls"
13
14
  end
data/exe/souls CHANGED
@@ -3,7 +3,7 @@ require "souls"
3
3
 
4
4
  begin
5
5
  begin
6
- require "./config/initializers/souls" unless ARGV[0] == "new"
6
+ require "./config/initializers/souls" unless ARGV[0] == "new" || ARGV[0] == "init"
7
7
  rescue
8
8
  Souls::Init.config_init
9
9
  end
@@ -46,10 +46,27 @@ begin
46
46
  when "-v", "--version"
47
47
  puts Souls::VERSION
48
48
  when "g", "generate"
49
- `touch .rubocop.yml`
50
- `touch .env`
51
- `touch .gitignore`
52
- `touch .irbrc`
49
+ case ARGV[1]
50
+ when "model"
51
+ Souls::Init.model class_name: ARGV[2]
52
+ when "mutation"
53
+ Souls::Init.mutation class_name: ARGV[2]
54
+ when "query"
55
+ Souls::Init.query class_name: ARGV[2]
56
+ when "type"
57
+ Souls::Init.type class_name: ARGV[2]
58
+ when "migration"
59
+ Souls::Init.migration class_name: ARGV[2]
60
+ when "rspec_model"
61
+ Souls::Init.rspec_model class_name: ARGV[2]
62
+ when "rspec_mutation"
63
+ Souls::Init.rspec_mutation class_name: ARGV[2]
64
+ when "rspec_query"
65
+ Souls::Init.rspec_query class_name: ARGV[2]
66
+ when "rspec_type"
67
+ Souls::Init.rspec_type class_name: ARGV[2]
68
+ else
69
+ end
53
70
  when "t", "test"
54
71
  case ARGV[1]
55
72
  when "-r"
@@ -125,7 +125,7 @@ module Souls
125
125
  def export_network_group
126
126
  app = Souls.configuration.app
127
127
  system "NEG_NAME=$(gcloud compute network-endpoint-groups list | grep #{app} | awk '{print $1}')"
128
- `echo $NEG_NAME > ./infra/config/neg_name`
128
+ `echo $NEG_NAME > ./config/neg_name`
129
129
  end
130
130
 
131
131
  def delete_network_group_list neg_name:
@@ -41,15 +41,16 @@ module Souls
41
41
  confirm = STDIN.gets.chomp
42
42
  raise StandardError, "Retry" unless confirm == ""
43
43
  download_souls app_name: app_name, repository_name: "souls_#{STRAINS[strain.to_i - 1]}"
44
- config_init app_name: app_name, project: project if config_needed.include?(strain)
44
+ initial_config_init app_name: app_name, project: project if config_needed.include?(strain)
45
45
  rescue StandardError => error
46
46
  puts error
47
47
  retry
48
48
  end
49
49
  end
50
50
 
51
- def config_init app_name: "souls", project: {}
51
+ def initial_config_init app_name: "souls", project: {}
52
52
  puts "Generating souls conf..."
53
+ `touch "#{app_name}/config/initializers/souls.rb"`
53
54
  file_path = "#{app_name}/config/initializers/souls.rb"
54
55
  File.open(file_path, "w") do |f|
55
56
  f.write <<~EOS
@@ -71,6 +72,33 @@ module Souls
71
72
  end
72
73
  end
73
74
 
75
+ def config_init app_name: "souls", project: {}
76
+ `touch ./config/initializers/souls.rb`
77
+ file_path = "./config/initializers/souls.rb"
78
+ puts "Generating souls conf..."
79
+ sleep(rand(0.1..0.3))
80
+ puts "Generated!"
81
+ puts "Let's Edit SOULs Conf: `#{file_path}`"
82
+ File.open(file_path, "w") do |f|
83
+ f.write <<~EOS
84
+ Souls.configure do |config|
85
+ config.main_project_id = "#{project[:main_project_id]}"
86
+ config.project_id = "#{project[:project_id]}"
87
+ config.app = "#{app_name}"
88
+ config.namespace = "#{project[:namespace]}"
89
+ config.service_name = "#{project[:service_name]}"
90
+ config.network = "#{project[:network]}"
91
+ config.machine_type = "#{project[:machine_type]}"
92
+ config.zone = "#{project[:zone]}"
93
+ config.domain = "#{project[:domain]}"
94
+ config.google_application_credentials = "#{project[:google_application_credentials]}"
95
+ config.strain = "#{project[:strain]}"
96
+ config.proto_package_name = "souls"
97
+ end
98
+ EOS
99
+ end
100
+ end
101
+
74
102
  def get_version repository_name: "souls_service"
75
103
  data = JSON.parse `curl \
76
104
  -H "Accept: application/vnd.github.v3+json" \
@@ -144,7 +172,7 @@ module Souls
144
172
  Souls.create_firewall_rule firewall_rule_name: firewall_rule_name
145
173
  Souls.create_backend_service service_name: service_name, health_check_name: health_check_name
146
174
  Souls.export_network_group
147
- file_path = "./infra/config/neg_name"
175
+ file_path = "./config/neg_name"
148
176
  File.open(file_path) do |f|
149
177
  Souls.add_backend_service service_name: service_name, neg_name: f.gets.to_s, zone: zone
150
178
  end
@@ -215,6 +243,149 @@ module Souls
215
243
  `souls i delete_ingress`
216
244
  end
217
245
 
246
+ def model class_name: "souls"
247
+ file_path = "./app/models/#{class_name}.rb"
248
+ File.open(file_path, "w") do |f|
249
+ f.write <<~EOS
250
+ class #{class_name.capitalize} < ActiveRecord::Base
251
+ end
252
+ EOS
253
+ end
254
+ puts "model #{class_name}.rb created!: `#{file_path}`"
255
+ end
256
+
257
+ def mutation class_name: "souls"
258
+ file_path = "./app/graphql/mutations/create_#{class_name}.rb"
259
+ File.open(file_path, "w") do |f|
260
+ f.write <<~EOS
261
+ module Mutations
262
+ class Create#{class_name.capitalize} < BaseMutation
263
+ field :#{class_name}, Types::#{class_name.capitalize}Type, null: false
264
+ field :error, String, null: true
265
+
266
+ ## Change argument as you needed
267
+ # argument :id, Integer, required: true
268
+ # argument :title, String, required: true
269
+ # argument :tag, [String], required: false
270
+ # argument :is_public, Boolean, required: true
271
+ # argument :public_date, GraphQL::Types::ISO8601DateTime, required: true
272
+
273
+ def resolve **args
274
+ #{class_name} = #{class_name.capitalize}.new args
275
+ if #{class_name}.save
276
+ { #{class_name}: #{class_name} }
277
+ else
278
+ { error: #{class_name}.errors.full_messages }
279
+ end
280
+ rescue StandardError => error
281
+ GraphQL::ExecutionError.new error
282
+ end
283
+ end
284
+ end
285
+ EOS
286
+ end
287
+ puts "mutation create_#{class_name}.rb created!: `#{file_path}`"
288
+ end
289
+
290
+ def query class_name: "souls"
291
+ file_path = "./app/graphql/queries/#{class_name}s.rb"
292
+ File.open(file_path, "w") do |f|
293
+ f.write <<~EOS
294
+ module Queries
295
+ class #{class_name.capitalize}s < Queries::BaseQuery
296
+ type [Types::#{class_name.capitalize}Type], null: false
297
+
298
+ def resolve
299
+ ::#{class_name.capitalize}.all
300
+ rescue StandardError => error
301
+ GraphQL::ExecutionError.new error
302
+ end
303
+ end
304
+ end
305
+ EOS
306
+ end
307
+ puts "query #{class_name}s.rb created!: `#{file_path}`"
308
+ file_path = "./app/graphql/queries/#{class_name}.rb"
309
+ File.open(file_path, "w") do |f|
310
+ f.write <<~EOS
311
+ module Queries
312
+ class #{class_name.capitalize} < Queries::BaseQuery
313
+ type Types::#{class_name.capitalize}Type, null: false
314
+ argument :id, Integer, required: true
315
+
316
+ def resolve id:
317
+ ::#{class_name.capitalize}.find(id)
318
+ rescue StandardError => error
319
+ GraphQL::ExecutionError.new error
320
+ end
321
+ end
322
+ end
323
+ EOS
324
+ puts "query #{class_name}.rb created!: `#{file_path}`"
325
+ end
326
+ end
327
+
328
+ def type class_name: "souls"
329
+ file_path = "./app/graphql/types/#{class_name}_type.rb"
330
+ File.open(file_path, "w") do |f|
331
+ f.write <<~EOS
332
+ module Types
333
+ class #{class_name.capitalize}Type < GraphQL::Schema::Object
334
+ implements GraphQL::Types::Relay::Node
335
+
336
+ ## Change field as you needed
337
+ # global_id_field :id
338
+ # field :user, Types::UserType, null: false
339
+ # field :title, String, null: false
340
+ # field :tag, [String], null: true
341
+ # field :public_date, GraphQL::Types::ISO8601DateTime, null: false
342
+ # field :is_public, Boolean, null: false
343
+ # field :article_category, Types::ArticleCategoryType, null: false
344
+ # field :created_at, GraphQL::Types::ISO8601DateTime, null: true
345
+ # field :updated_at, GraphQL::Types::ISO8601DateTime, null: true
346
+ end
347
+ end
348
+ EOS
349
+ end
350
+ puts "type #{class_name}.rb created!: `#{file_path}`"
351
+ end
352
+
353
+ def rspec_model class_name: "souls"
354
+ file_path = "./spec/models/#{class_name}_spec.rb"
355
+ File.open(file_path, "w") do |f|
356
+ f.write <<~EOS
357
+ RSpec.describe #{class_name.capitalize}, type: :model do
358
+ it "作成する" do
359
+ expect(FactoryBot.build(:#{class_name})).to be_valid
360
+ end
361
+
362
+ it "同じtitleがあると作成できない" do
363
+ FactoryBot.build(:#{class_name}, title: "hey")
364
+ expect(FactoryBot.build(:#{class_name}, title: "hey")).to be_valid
365
+ end
366
+ end
367
+ EOS
368
+ end
369
+ puts "rspec_model #{class_name}_spec.rb created!: `#{file_path}`"
370
+ end
371
+
372
+ def rspec_mutation class_name: "souls"
373
+ end
374
+
375
+ def rspec_query class_name: "souls"
376
+ end
377
+
378
+ def rspec_type class_name: "souls"
379
+ end
380
+
381
+ def migration class_name: "souls"
382
+ model class_name: class_name
383
+ mutation class_name: class_name
384
+ query class_name: class_name
385
+ type class_name: class_name
386
+ rspec_model class_name: class_name
387
+ end
388
+
218
389
  end
219
390
  end
220
391
  end
@@ -1,3 +1,3 @@
1
1
  module Souls
2
- VERSION = "0.8.1"
2
+ VERSION = "0.8.6"
3
3
  end
@@ -3,8 +3,8 @@ require_relative 'lib/souls/version'
3
3
  Gem::Specification.new do |spec|
4
4
  spec.name = "souls"
5
5
  spec.version = Souls::VERSION
6
- spec.authors = ["POPPIN-FUMI", "KishiTheMechanic"]
7
- spec.email = ["fumitake.kawasaki@el-soul.com", "shota.kishi@el-soul.com"]
6
+ spec.authors = ["POPPIN-FUMI", "KishiTheMechanic", "James Neve"]
7
+ spec.email = ["fumitake.kawasaki@el-soul.com", "shota.kishi@el-soul.com", "jamesoneve@gmail.com"]
8
8
 
9
9
  spec.summary = "SOULS is a Web Application Framework for Microservices on Multi Cloud Platform such as Google Cloud Platform, Amazon Web Services, and Alibaba Cloud. Auto deploy with scalable condition. You can focus on business logic. No more infra problems."
10
10
  spec.description = "SOULS is a Web Application Framework for Microservices on Multi Cloud Platform such as Google Cloud Platform, Amazon Web Services, and Alibaba Cloud. Auto deploy with scalable condition. You can focus on business logic. No more infra problems."
metadata CHANGED
@@ -1,15 +1,16 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: souls
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.1
4
+ version: 0.8.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - POPPIN-FUMI
8
8
  - KishiTheMechanic
9
+ - James Neve
9
10
  autorequire:
10
11
  bindir: exe
11
12
  cert_chain: []
12
- date: 2021-01-17 00:00:00.000000000 Z
13
+ date: 2021-01-20 00:00:00.000000000 Z
13
14
  dependencies: []
14
15
  description: SOULS is a Web Application Framework for Microservices on Multi Cloud
15
16
  Platform such as Google Cloud Platform, Amazon Web Services, and Alibaba Cloud.
@@ -18,6 +19,7 @@ description: SOULS is a Web Application Framework for Microservices on Multi Clo
18
19
  email:
19
20
  - fumitake.kawasaki@el-soul.com
20
21
  - shota.kishi@el-soul.com
22
+ - jamesoneve@gmail.com
21
23
  executables:
22
24
  - souls
23
25
  extensions: []
@@ -45,27 +47,6 @@ files:
45
47
  - lib/souls/version.rb
46
48
  - rbs/init.rbs
47
49
  - souls.gemspec
48
- - souls_service-0.0.8/.env.sample
49
- - souls_service-0.0.8/.gitignore
50
- - souls_service-0.0.8/.irbrc
51
- - souls_service-0.0.8/.rubocop.yml
52
- - souls_service-0.0.8/.ruby-version
53
- - souls_service-0.0.8/.ruby_version
54
- - souls_service-0.0.8/Dockerfile
55
- - souls_service-0.0.8/Gemfile
56
- - souls_service-0.0.8/Gemfile.lock
57
- - souls_service-0.0.8/README.md
58
- - souls_service-0.0.8/Rakefile
59
- - souls_service-0.0.8/app.rb
60
- - souls_service-0.0.8/app/controllers/application_controller.rb
61
- - souls_service-0.0.8/app/controllers/article_method.rb
62
- - souls_service-0.0.8/app/controllers/hello_method.rb
63
- - souls_service-0.0.8/app/services/blog_pb.rb
64
- - souls_service-0.0.8/app/services/souls.rb
65
- - souls_service-0.0.8/config/initializers/souls.rb
66
- - souls_service-0.0.8/deployment.yml
67
- - souls_service-0.0.8/grpc_server.rb
68
- - souls_service-0.0.8/protos/blog.proto
69
50
  - v0.0.8.tar.gz
70
51
  homepage: https://github.com/elsoul/souls
71
52
  licenses:
@@ -89,7 +70,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
89
70
  - !ruby/object:Gem::Version
90
71
  version: '0'
91
72
  requirements: []
92
- rubygems_version: 3.2.4
73
+ rubygems_version: 3.2.3
93
74
  signing_key:
94
75
  specification_version: 4
95
76
  summary: SOULS is a Web Application Framework for Microservices on Multi Cloud Platform
@@ -1 +0,0 @@
1
- GOOGLE_APPLICATION_CREDENTIALS="./config/keyfile.json"
@@ -1,31 +0,0 @@
1
- # See https://help.github.com/articles/ignoring-files for more about ignoring files.
2
- #
3
- # If you find yourself ignoring temporary files generated by your text editor
4
- # or operating system, you probably want to add a global ignore instead:
5
- # git config --global core.excludesfile '~/.gitignore_global'
6
-
7
- # Ignore bundler config.
8
- /.bundle
9
- .DS_Store
10
- # Ignore all logfiles and tempfiles.
11
- /log/*
12
- /tmp/*
13
- !/log/.keep
14
- !/tmp/.keep
15
-
16
- # Ignore pidfiles, but keep the directory.
17
- /tmp/pids/*
18
- !/tmp/pids/
19
- !/tmp/pids/.keep
20
-
21
- # Ignore uploaded files in development.
22
- /storage/*
23
- !/storage/.keep
24
- .byebug_history
25
-
26
- # Ignore master key for decrypting credentials and more.
27
- /config/master.key
28
- .irb_history
29
- .idea
30
- .env
31
- /config/keyfile.json
@@ -1,2 +0,0 @@
1
- require "./app"
2
- require "google/cloud/firestore"
@@ -1,212 +0,0 @@
1
- AllCops:
2
- EnabledByDefault: true
3
- Exclude:
4
- - "db/migrate/*.rb"
5
- - "db/schema.rb"
6
- - "app/services/*.rb"
7
-
8
- Style/AndOr:
9
- Enabled: false
10
-
11
- Style/ClassAndModuleChildren:
12
- Enabled: false
13
-
14
- Style/AsciiComments:
15
- Enabled: false
16
-
17
- Style/SymbolArray:
18
- Enabled: false
19
-
20
- Style/WordArray:
21
- Enabled: false
22
-
23
- Style/MixinGrouping:
24
- Enabled: false
25
-
26
- Style/RescueStandardError:
27
- Enabled: false
28
-
29
- Style/MethodCallWithArgsParentheses:
30
- Enabled: false
31
-
32
- Style/DocumentationMethod:
33
- Enabled: false
34
-
35
- Style/CollectionMethods:
36
- PreferredMethods:
37
- detect: "detect"
38
- find: "detect"
39
- inject: "inject"
40
- reduce: "inject"
41
-
42
- Style/Documentation:
43
- Enabled: false
44
-
45
- Style/DoubleNegation:
46
- Enabled: false
47
-
48
- Lint/ConstantResolution:
49
- Enabled: false
50
-
51
- Layout/DotPosition:
52
- EnforcedStyle: trailing
53
-
54
-
55
- Layout/EmptyLineAfterGuardClause:
56
- Enabled: false
57
-
58
- Style/EmptyElse:
59
- EnforcedStyle: empty
60
-
61
- Layout/ExtraSpacing:
62
- Exclude:
63
- - "db/migrate/*.rb"
64
- - "*.gemspec"
65
-
66
- Style/FormatString:
67
- EnforcedStyle: percent
68
-
69
- Style/MissingElse:
70
- Enabled: false
71
-
72
- Style/StringHashKeys:
73
- Exclude:
74
- - "spec/queries/*.rb"
75
- - "*.gemspec"
76
-
77
- Style/GuardClause:
78
- MinBodyLength: 5
79
- Exclude:
80
- - "spec/spec_helper.rb"
81
-
82
- Style/HashSyntax:
83
- EnforcedStyle: ruby19
84
- Exclude:
85
- - "**/*.rake"
86
- - "Rakefile"
87
-
88
- Style/IfUnlessModifier:
89
- Enabled: false
90
-
91
- Style/PreferredHashMethods:
92
- EnforcedStyle: short
93
-
94
- Style/Lambda:
95
- Enabled: false
96
-
97
- Style/NumericLiterals:
98
- MinDigits: 7
99
-
100
- Style/PerlBackrefs:
101
- AutoCorrect: false
102
-
103
- Style/RedundantSelf:
104
- Enabled: false
105
-
106
- Style/FrozenStringLiteralComment:
107
- Enabled: false
108
-
109
- Style/RedundantReturn:
110
- AllowMultipleReturnValues: true
111
-
112
- Style/Semicolon:
113
- Exclude:
114
- - "spec/**/*"
115
-
116
- Style/SignalException:
117
- EnforcedStyle: only_raise
118
-
119
- Style/MethodDefParentheses:
120
- Enabled: false
121
-
122
- Style/StringLiterals:
123
- EnforcedStyle: double_quotes
124
-
125
- Style/StringLiteralsInInterpolation:
126
- Enabled: false
127
-
128
- Style/SingleLineBlockParams:
129
- Enabled: false
130
-
131
- Lint/UnderscorePrefixedVariableName:
132
- Enabled: false
133
-
134
- Lint/UnusedMethodArgument:
135
- Enabled: false
136
-
137
-
138
- Metrics/AbcSize:
139
- Enabled: false
140
-
141
- Metrics/CyclomaticComplexity:
142
- Max: 10
143
-
144
- Metrics/PerceivedComplexity:
145
- Enabled: false
146
-
147
- Metrics/BlockLength:
148
- Enabled: false
149
-
150
- Layout/LineLength:
151
- Enabled: false
152
-
153
-
154
- Metrics/MethodLength:
155
- Enabled: false
156
-
157
- Metrics/ClassLength:
158
- Enabled: false
159
-
160
- Naming/HeredocDelimiterNaming:
161
- Enabled: false
162
-
163
- Naming/AccessorMethodName:
164
- Enabled: false
165
-
166
- Metrics/ModuleLength:
167
- Enabled: false
168
-
169
- Lint/UnusedBlockArgument:
170
- Enabled: false
171
-
172
- Lint/RescueException:
173
- Enabled: false
174
-
175
- Naming/RescuedExceptionsVariableName:
176
- Enabled: false
177
-
178
- Bundler/GemComment:
179
- Enabled: false
180
-
181
- Style/SafeNavigation:
182
- Enabled: false
183
-
184
- Lint/NumberConversion:
185
- Enabled: false
186
- Style/ConstantVisibility:
187
- Enabled: false
188
- Style/MutableConstant:
189
- Enabled: false
190
- Style/Copyright:
191
- Enabled: false
192
- Style/MultilineTernaryOperator:
193
- Enabled: false
194
- Layout/MultilineAssignmentLayout:
195
- Enabled: false
196
- Style/Send:
197
- Enabled: false
198
- Style/MixinUsage:
199
- Enabled: false
200
- Style/GlobalStdStream:
201
- Enabled: false
202
- Lint/ConstantDefinitionInBlock:
203
- Enabled: false
204
- Layout/TrailingEmptyLines:
205
- Enabled: false
206
- Style/PercentLiteralDelimiters:
207
- Enabled: false
208
- Style/ClassVars:
209
- Exclude:
210
- - "spec/spec_helper.rb"
211
- Style/StringConcatenation:
212
- Enabled: false