shelly 0.4.17 → 0.4.18

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,15 +1,7 @@
1
1
  ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- OTQwZWEzYzYyMjJiMGE4ODE4NWQ0ZjVjY2E3ZGUyYjNmYjg3MGE1Zg==
5
- data.tar.gz: !binary |-
6
- NmI3YWMzMzU0YzE1OGMwZmQyZTFhNDY3ZWM2OWU4YWYxMzVkNDIxNA==
2
+ SHA1:
3
+ metadata.gz: 0e096d721714633a31e9f27597281ac05529cd3d
4
+ data.tar.gz: d679baa8bd677204515e5ff42d54d07ad0ac436b
7
5
  SHA512:
8
- metadata.gz: !binary |-
9
- YmM0MDMzMTU2Yzk5ODk3OTE5ZDRiOWYzOWU5MTMzYzVhNDgwODU2ZDA5MDIy
10
- MzMzZjU2YzYyMzJhZjFiMzM1OTljODc3ZWI1OGEzYzFlZGU3MGI1NjI1NmNk
11
- OGY1Y2Q4OTM1Y2VhNzc3NGNhYjY3Mzg1ZTIwYjhmZmVmNjYyMTE=
12
- data.tar.gz: !binary |-
13
- YzkwZjU5MGQzMGExMzIzMjRmMWJjZjk0Y2RiODA3NjNhZjgwMzYyZDlkNTBl
14
- ZGQ0MjZkMjRiODlmYjM2YTk0NmEyMTZjMzUwOTUyMDNmOTQ0MjJhMTVmYzA4
15
- ODAxNWJhODNhYmQ5OTE3Yzg4ZDNkOWY5N2RkNDFjMDc2YWFmOWQ=
6
+ metadata.gz: 260dbf9bc61c1bbe9b7c0e3e134c94a82d3a543120aed4b9a6fb199c7b314eceec0e625244b96dc28dbdcf0584ac207ff7486d6194eebee1335cf237ec32acd3
7
+ data.tar.gz: e6c665a276d89d14fef5f60d8065282e08b4649bf2011af03cd3634ba553af3da4f563cda26de8efaf8114c2d20adda48fa1c973659af9883bab513abd6b3bb1
data/CHANGELOG.md CHANGED
@@ -1,3 +1,8 @@
1
+ ## 0.4.18 / 2013-12-17
2
+
3
+ * [improvement] `shelly add` should ask about databases instead of database
4
+ * [improvement] Improved messages displayed while deleting the application
5
+
1
6
  ## 0.4.17 / 2013-12-03
2
7
 
3
8
  * [bugfix] Remove ssh_key from Shelly Cloud only if it was already uploaded
@@ -228,14 +228,19 @@ Wait until cloud is in 'turned off' state and try again.}
228
228
  method_option :cloud, :type => :string, :aliases => "-c", :desc => "Specify cloud"
229
229
  def delete
230
230
  app = multiple_clouds(options[:cloud], "delete")
231
- say "You are about to delete application: #{app}."
232
- say "Press Control-C at any moment to cancel."
233
- say "Please confirm each question by typing yes and pressing Enter."
231
+
232
+ say_new_line
233
+ say "You are going to:"
234
+ say " * remove all files stored in the persistent storage for #{app},"
235
+ say " * remove all database data for #{app},"
236
+ say " * remove #{app} cloud from Shelly Cloud"
237
+ say_new_line
238
+ say "This action is permanent and can not be undone.", :red
234
239
  say_new_line
235
- ask_to_delete_files
236
- ask_to_delete_database
237
- ask_to_delete_application
240
+ ask_to_delete_application app
241
+
238
242
  app.delete
243
+
239
244
  say_new_line
240
245
  say "Scheduling application delete - done"
241
246
  if App.inside_git_repository?
@@ -428,7 +433,8 @@ Wait until cloud is in 'turned off' state and try again.}
428
433
 
429
434
  def ask_for_databases
430
435
  kinds = Shelly::App::DATABASE_CHOICES
431
- databases = ask("Which database do you want to use #{kinds.join(", ")} (postgresql - default):")
436
+ databases = ask("Which databases do you want to use " \
437
+ "#{kinds.join(", ")} (postgresql - default):")
432
438
  begin
433
439
  databases = databases.split(/[\s,]/).reject(&:blank?)
434
440
  valid = valid_databases?(databases)
@@ -43,19 +43,13 @@ module Shelly
43
43
  say_error "Email can't be blank, please try again"
44
44
  end
45
45
 
46
- def ask_to_delete_files
47
- delete_files_question = "I want to delete all files stored on Shelly Cloud (yes/no):"
48
- exit 1 unless yes?(delete_files_question)
49
- end
50
-
51
- def ask_to_delete_database
52
- delete_database_question = "I want to delete all database data stored on Shelly Cloud (yes/no):"
53
- exit 1 unless yes?(delete_database_question)
54
- end
46
+ def ask_to_delete_application(app)
47
+ code_name = ask "Please confirm with the name of the cloud:"
55
48
 
56
- def ask_to_delete_application
57
- delete_application_question = "I want to delete the application (yes/no):"
58
- exit 1 unless yes?(delete_application_question)
49
+ unless code_name == app.code_name
50
+ say_error "The name does not match. Operation aborted."
51
+ exit 1
52
+ end
59
53
  end
60
54
 
61
55
  def ask_for_acceptance_of_terms
@@ -1,3 +1,3 @@
1
1
  module Shelly
2
- VERSION = "0.4.17"
2
+ VERSION = "0.4.18"
3
3
  end
@@ -375,7 +375,9 @@ More info at http://git-scm.com/book/en/Git-Basics-Getting-a-Git-Repository\e[0m
375
375
  end
376
376
 
377
377
  it "should use database provided by user (separated by comma or space)" do
378
- $stdout.should_receive(:print).with("Which database do you want to use postgresql, mongodb, redis, none (postgresql - default): ")
378
+ $stdout.should_receive(:print).
379
+ with("Which databases do you want to use " \
380
+ "postgresql, mongodb, redis, none (postgresql - default): ")
379
381
  @app.should_receive(:databases=).with(["postgresql", "mongodb", "redis"])
380
382
  fake_stdin(["", "postgresql ,mongodb redis"]) do
381
383
  invoke(@main, :add)
@@ -383,8 +385,12 @@ More info at http://git-scm.com/book/en/Git-Basics-Getting-a-Git-Repository\e[0m
383
385
  end
384
386
 
385
387
  it "should ask again for databases if unsupported kind typed" do
386
- $stdout.should_receive(:print).with("Which database do you want to use postgresql, mongodb, redis, none (postgresql - default): ")
387
- $stdout.should_receive(:print).with("Unknown database kind. Supported are: postgresql, mongodb, redis, none: ")
388
+ $stdout.should_receive(:print).
389
+ with("Which databases do you want to use " \
390
+ "postgresql, mongodb, redis, none (postgresql - default): ")
391
+ $stdout.should_receive(:print).
392
+ with("Unknown database kind. Supported are: " \
393
+ "postgresql, mongodb, redis, none: ")
388
394
  fake_stdin(["", "postgresql,doesnt-exist", "none"]) do
389
395
  invoke(@main, :add)
390
396
  end
@@ -1173,7 +1179,7 @@ Wait until cloud is in 'turned off' state and try again.")
1173
1179
  it "should ensure multiple_clouds check" do
1174
1180
  @client.stub(:delete)
1175
1181
  @main.should_receive(:multiple_clouds).and_return(@app)
1176
- fake_stdin(["yes", "yes", "yes"]) do
1182
+ fake_stdin(["foo-staging"]) do
1177
1183
  invoke(@main, :delete)
1178
1184
  end
1179
1185
  end
@@ -1184,37 +1190,47 @@ Wait until cloud is in 'turned off' state and try again.")
1184
1190
  f.write("foo-staging:\nfoo-production:\n") }
1185
1191
  end
1186
1192
 
1187
- it "should ask about delete application parts" do
1188
- $stdout.should_receive(:puts).with("You are about to delete application: foo-staging.")
1189
- $stdout.should_receive(:puts).with("Press Control-C at any moment to cancel.")
1190
- $stdout.should_receive(:puts).with("Please confirm each question by typing yes and pressing Enter.")
1193
+ it "should display warning and ask about deleting the application" do
1194
+ $stdout.should_receive(:puts).with("You are going to:")
1195
+ $stdout.should_receive(:puts).
1196
+ with(" * remove all files stored in the persistent storage for" \
1197
+ " foo-staging,")
1198
+ $stdout.should_receive(:puts).
1199
+ with(" * remove all database data for foo-staging,")
1200
+ $stdout.should_receive(:puts).
1201
+ with(" * remove foo-staging cloud from Shelly Cloud")
1191
1202
  $stdout.should_receive(:puts).with("\n")
1192
- $stdout.should_receive(:print).with("I want to delete all files stored on Shelly Cloud (yes/no): ")
1193
- $stdout.should_receive(:print).with("I want to delete all database data stored on Shelly Cloud (yes/no): ")
1194
- $stdout.should_receive(:print).with("I want to delete the application (yes/no): ")
1203
+ $stdout.should_receive(:puts).
1204
+ with(red "This action is permanent and can not be undone.")
1195
1205
  $stdout.should_receive(:puts).with("\n")
1206
+ $stdout.should_receive(:print).
1207
+ with("Please confirm with the name of the cloud: ")
1196
1208
  $stdout.should_receive(:puts).with("Scheduling application delete - done")
1197
1209
  $stdout.should_receive(:puts).with("Removing git remote - done")
1198
1210
  @main.options = {:cloud => "foo-staging"}
1199
- fake_stdin(["yes", "yes", "yes"]) do
1211
+ fake_stdin(["foo-staging"]) do
1200
1212
  invoke(@main, :delete)
1201
1213
  end
1202
1214
  end
1203
1215
 
1204
- it "should return exit 1 when user doesn't type 'yes'" do
1205
- @app.should_not_receive(:delete)
1206
- lambda{
1207
- fake_stdin(["yes", "yes", "no"]) do
1208
- @main.options = {:cloud => "foo-staging"}
1209
- invoke(@main, :delete)
1210
- end
1211
- }.should raise_error(SystemExit)
1216
+ context 'when given code name does not match' do
1217
+ it "should print message and return exit 1" do
1218
+ @app.should_not_receive(:delete)
1219
+ $stdout.should_receive(:puts).
1220
+ with(red "The name does not match. Operation aborted.")
1221
+ lambda{
1222
+ fake_stdin(["foo-production"]) do
1223
+ @main.options = {:cloud => "foo-staging"}
1224
+ invoke(@main, :delete)
1225
+ end
1226
+ }.should raise_error(SystemExit)
1227
+ end
1212
1228
  end
1213
1229
 
1214
1230
  it "should remove git remote" do
1215
1231
  @app.should_receive(:remove_git_remote)
1216
1232
  @main.options = {:cloud => "foo-staging"}
1217
- fake_stdin(["yes", "yes", "yes"]) do
1233
+ fake_stdin(["foo-staging"]) do
1218
1234
  invoke(@main, :delete)
1219
1235
  end
1220
1236
  end
@@ -1229,7 +1245,7 @@ Wait until cloud is in 'turned off' state and try again.")
1229
1245
  it "should say that Git remote missing" do
1230
1246
  Shelly::App.stub(:inside_git_repository?).and_return(false)
1231
1247
  $stdout.should_receive(:puts).with("Missing git remote")
1232
- fake_stdin(["yes", "yes", "yes"]) do
1248
+ fake_stdin(["foo-staging"]) do
1233
1249
  @main.options = {:cloud => "foo-staging"}
1234
1250
  invoke(@main, :delete)
1235
1251
  end
@@ -1243,17 +1259,23 @@ Wait until cloud is in 'turned off' state and try again.")
1243
1259
  end
1244
1260
 
1245
1261
  it "should take the cloud from Cloudfile" do
1246
- $stdout.should_receive(:puts).with("You are about to delete application: foo-staging.")
1247
- $stdout.should_receive(:puts).with("Press Control-C at any moment to cancel.")
1248
- $stdout.should_receive(:puts).with("Please confirm each question by typing yes and pressing Enter.")
1262
+ $stdout.should_receive(:puts).with("You are going to:")
1263
+ $stdout.should_receive(:puts).
1264
+ with(" * remove all files stored in the persistent storage for" \
1265
+ " foo-staging,")
1266
+ $stdout.should_receive(:puts).
1267
+ with(" * remove all database data for foo-staging,")
1268
+ $stdout.should_receive(:puts).
1269
+ with(" * remove foo-staging cloud from Shelly Cloud")
1249
1270
  $stdout.should_receive(:puts).with("\n")
1250
- $stdout.should_receive(:print).with("I want to delete all files stored on Shelly Cloud (yes/no): ")
1251
- $stdout.should_receive(:print).with("I want to delete all database data stored on Shelly Cloud (yes/no): ")
1252
- $stdout.should_receive(:print).with("I want to delete the application (yes/no): ")
1271
+ $stdout.should_receive(:puts).
1272
+ with(red "This action is permanent and can not be undone.")
1253
1273
  $stdout.should_receive(:puts).with("\n")
1274
+ $stdout.should_receive(:print).
1275
+ with("Please confirm with the name of the cloud: ")
1254
1276
  $stdout.should_receive(:puts).with("Scheduling application delete - done")
1255
1277
  $stdout.should_receive(:puts).with("Removing git remote - done")
1256
- fake_stdin(["yes", "y", "yes"]) do
1278
+ fake_stdin(["foo-staging"]) do
1257
1279
  invoke(@main, :delete)
1258
1280
  end
1259
1281
  end
metadata CHANGED
@@ -1,209 +1,181 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: shelly
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.17
4
+ version: 0.4.18
5
5
  platform: ruby
6
6
  authors:
7
7
  - Shelly Cloud team
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-12-03 00:00:00.000000000 Z
11
+ date: 2013-12-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- type: :development
15
- prerelease: false
16
14
  name: rspec
17
- version_requirements: !ruby/object:Gem::Requirement
18
- requirements:
19
- - - ~>
20
- - !ruby/object:Gem::Version
21
- version: 2.11.0
22
15
  requirement: !ruby/object:Gem::Requirement
23
16
  requirements:
24
17
  - - ~>
25
18
  - !ruby/object:Gem::Version
26
19
  version: 2.11.0
27
- - !ruby/object:Gem::Dependency
28
20
  type: :development
29
21
  prerelease: false
30
- name: rake
31
22
  version_requirements: !ruby/object:Gem::Requirement
32
23
  requirements:
33
- - - ! '>='
34
- - !ruby/object:Gem::Version
35
- version: '0'
36
- requirement: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - ! '>='
24
+ - - ~>
39
25
  - !ruby/object:Gem::Version
40
- version: '0'
26
+ version: 2.11.0
41
27
  - !ruby/object:Gem::Dependency
42
- type: :development
43
- prerelease: false
44
- name: simplecov
45
- version_requirements: !ruby/object:Gem::Requirement
46
- requirements:
47
- - - ! '>='
48
- - !ruby/object:Gem::Version
49
- version: '0'
28
+ name: rake
50
29
  requirement: !ruby/object:Gem::Requirement
51
30
  requirements:
52
- - - ! '>='
31
+ - - '>='
53
32
  - !ruby/object:Gem::Version
54
33
  version: '0'
55
- - !ruby/object:Gem::Dependency
56
34
  type: :development
57
35
  prerelease: false
58
- name: ruby_gntp
59
36
  version_requirements: !ruby/object:Gem::Requirement
60
37
  requirements:
61
- - - ! '>='
38
+ - - '>='
62
39
  - !ruby/object:Gem::Version
63
40
  version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: simplecov
64
43
  requirement: !ruby/object:Gem::Requirement
65
44
  requirements:
66
- - - ! '>='
45
+ - - '>='
67
46
  - !ruby/object:Gem::Version
68
47
  version: '0'
69
- - !ruby/object:Gem::Dependency
70
48
  type: :development
71
49
  prerelease: false
72
- name: rb-fsevent
73
50
  version_requirements: !ruby/object:Gem::Requirement
74
51
  requirements:
75
- - - ! '>='
52
+ - - '>='
76
53
  - !ruby/object:Gem::Version
77
54
  version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: fakefs
78
57
  requirement: !ruby/object:Gem::Requirement
79
58
  requirements:
80
- - - ! '>='
59
+ - - '>='
81
60
  - !ruby/object:Gem::Version
82
61
  version: '0'
83
- - !ruby/object:Gem::Dependency
84
62
  type: :development
85
63
  prerelease: false
86
- name: fakefs
87
64
  version_requirements: !ruby/object:Gem::Requirement
88
65
  requirements:
89
- - - ! '>='
66
+ - - '>='
90
67
  - !ruby/object:Gem::Version
91
68
  version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: fakeweb
92
71
  requirement: !ruby/object:Gem::Requirement
93
72
  requirements:
94
- - - ! '>='
73
+ - - '>='
95
74
  - !ruby/object:Gem::Version
96
75
  version: '0'
97
- - !ruby/object:Gem::Dependency
98
76
  type: :development
99
77
  prerelease: false
100
- name: fakeweb
101
78
  version_requirements: !ruby/object:Gem::Requirement
102
79
  requirements:
103
- - - ! '>='
80
+ - - '>='
104
81
  - !ruby/object:Gem::Version
105
82
  version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: wijet-thor
106
85
  requirement: !ruby/object:Gem::Requirement
107
86
  requirements:
108
- - - ! '>='
87
+ - - ~>
109
88
  - !ruby/object:Gem::Version
110
- version: '0'
111
- - !ruby/object:Gem::Dependency
89
+ version: 0.14.10
112
90
  type: :runtime
113
91
  prerelease: false
114
- name: wijet-thor
115
92
  version_requirements: !ruby/object:Gem::Requirement
116
93
  requirements:
117
94
  - - ~>
118
95
  - !ruby/object:Gem::Version
119
96
  version: 0.14.10
97
+ - !ruby/object:Gem::Dependency
98
+ name: rest-client
120
99
  requirement: !ruby/object:Gem::Requirement
121
100
  requirements:
122
- - - ~>
101
+ - - '>='
123
102
  - !ruby/object:Gem::Version
124
- version: 0.14.10
125
- - !ruby/object:Gem::Dependency
103
+ version: '0'
126
104
  type: :runtime
127
105
  prerelease: false
128
- name: rest-client
129
106
  version_requirements: !ruby/object:Gem::Requirement
130
107
  requirements:
131
- - - ! '>='
108
+ - - '>='
132
109
  - !ruby/object:Gem::Version
133
110
  version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: mime-types
134
113
  requirement: !ruby/object:Gem::Requirement
135
114
  requirements:
136
- - - ! '>='
115
+ - - ~>
137
116
  - !ruby/object:Gem::Version
138
- version: '0'
139
- - !ruby/object:Gem::Dependency
117
+ version: '1.16'
140
118
  type: :runtime
141
119
  prerelease: false
142
- name: mime-types
143
120
  version_requirements: !ruby/object:Gem::Requirement
144
121
  requirements:
145
122
  - - ~>
146
123
  - !ruby/object:Gem::Version
147
124
  version: '1.16'
125
+ - !ruby/object:Gem::Dependency
126
+ name: json
148
127
  requirement: !ruby/object:Gem::Requirement
149
128
  requirements:
150
- - - ~>
129
+ - - '>='
151
130
  - !ruby/object:Gem::Version
152
- version: '1.16'
153
- - !ruby/object:Gem::Dependency
131
+ version: '0'
154
132
  type: :runtime
155
133
  prerelease: false
156
- name: json
157
134
  version_requirements: !ruby/object:Gem::Requirement
158
135
  requirements:
159
- - - ! '>='
136
+ - - '>='
160
137
  - !ruby/object:Gem::Version
161
138
  version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: progressbar
162
141
  requirement: !ruby/object:Gem::Requirement
163
142
  requirements:
164
- - - ! '>='
143
+ - - '>='
165
144
  - !ruby/object:Gem::Version
166
145
  version: '0'
167
- - !ruby/object:Gem::Dependency
168
146
  type: :runtime
169
147
  prerelease: false
170
- name: progressbar
171
148
  version_requirements: !ruby/object:Gem::Requirement
172
149
  requirements:
173
- - - ! '>='
150
+ - - '>='
174
151
  - !ruby/object:Gem::Version
175
152
  version: '0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: launchy
176
155
  requirement: !ruby/object:Gem::Requirement
177
156
  requirements:
178
- - - ! '>='
157
+ - - '>='
179
158
  - !ruby/object:Gem::Version
180
159
  version: '0'
181
- - !ruby/object:Gem::Dependency
182
160
  type: :runtime
183
161
  prerelease: false
184
- name: launchy
185
162
  version_requirements: !ruby/object:Gem::Requirement
186
163
  requirements:
187
- - - ! '>='
164
+ - - '>='
188
165
  - !ruby/object:Gem::Version
189
166
  version: '0'
167
+ - !ruby/object:Gem::Dependency
168
+ name: netrc
190
169
  requirement: !ruby/object:Gem::Requirement
191
170
  requirements:
192
- - - ! '>='
171
+ - - '>='
193
172
  - !ruby/object:Gem::Version
194
173
  version: '0'
195
- - !ruby/object:Gem::Dependency
196
174
  type: :runtime
197
175
  prerelease: false
198
- name: netrc
199
176
  version_requirements: !ruby/object:Gem::Requirement
200
177
  requirements:
201
- - - ! '>='
202
- - !ruby/object:Gem::Version
203
- version: '0'
204
- requirement: !ruby/object:Gem::Requirement
205
- requirements:
206
- - - ! '>='
178
+ - - '>='
207
179
  - !ruby/object:Gem::Version
208
180
  version: '0'
209
181
  description: Tool for managing applications and clouds at shellycloud.com
@@ -310,44 +282,18 @@ require_paths:
310
282
  - lib
311
283
  required_ruby_version: !ruby/object:Gem::Requirement
312
284
  requirements:
313
- - - ! '>='
285
+ - - '>='
314
286
  - !ruby/object:Gem::Version
315
287
  version: '0'
316
288
  required_rubygems_version: !ruby/object:Gem::Requirement
317
289
  requirements:
318
- - - ! '>='
290
+ - - '>='
319
291
  - !ruby/object:Gem::Version
320
292
  version: '0'
321
293
  requirements: []
322
294
  rubyforge_project: shelly
323
- rubygems_version: 2.1.5
295
+ rubygems_version: 2.1.11
324
296
  signing_key:
325
297
  specification_version: 4
326
298
  summary: Shelly Cloud command line tool
327
- test_files:
328
- - spec/helpers.rb
329
- - spec/input_faker.rb
330
- - spec/shelly/app_spec.rb
331
- - spec/shelly/backup_spec.rb
332
- - spec/shelly/cli/backup_spec.rb
333
- - spec/shelly/cli/cert_spec.rb
334
- - spec/shelly/cli/config_spec.rb
335
- - spec/shelly/cli/database_spec.rb
336
- - spec/shelly/cli/deploy_spec.rb
337
- - spec/shelly/cli/file_spec.rb
338
- - spec/shelly/cli/logs_spec.rb
339
- - spec/shelly/cli/main_spec.rb
340
- - spec/shelly/cli/organization_spec.rb
341
- - spec/shelly/cli/runner_spec.rb
342
- - spec/shelly/cli/user_spec.rb
343
- - spec/shelly/client_spec.rb
344
- - spec/shelly/cloudfile_spec.rb
345
- - spec/shelly/download_progress_bar_spec.rb
346
- - spec/shelly/model_spec.rb
347
- - spec/shelly/organization_spec.rb
348
- - spec/shelly/ssh_key_spec.rb
349
- - spec/shelly/ssh_keys_spec.rb
350
- - spec/shelly/structure_validator_spec.rb
351
- - spec/shelly/user_spec.rb
352
- - spec/spec_helper.rb
353
- - spec/thor/options_spec.rb
299
+ test_files: []