shelly 0.2.12 → 0.2.13

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,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- ODAyNzViYTA0NThiYmE0ZDliNDI4ZjE1YmY4MzRlN2EwZjc1NDkwZA==
4
+ YzAwOWRmMjEyZDA5OWNlOTg1NTJjYzkxNjY1MTFjODA5MzI0NDA5Yw==
5
5
  data.tar.gz: !binary |-
6
- OTE1MjY5MTU2MThiNTJhYTk1MWFjOWU4M2FhNTFmM2U2MzMwYjFjZQ==
6
+ NDg0YjA5MTcxMDdkYTE2NDJiY2Q3NDRlNmM2NzJjODk1ZDM2NTIxMQ==
7
7
  !binary "U0hBNTEy":
8
8
  metadata.gz: !binary |-
9
- ZGY4OTNjZTVkNzEwNmZkZDBkNGQzNzNlYjQzNzIwYTAyMjhhMjZlZTZkMTM2
10
- NDYyZjg5MTc1MzQ5NWE0ZjEzZTkwNDJiYzMxNTQ0M2ZmYTBmMDkyZGYxOTM0
11
- YmY2NjMwNDlhZDk4MGE5MjYzNDhjZjU5ZDA5ZTgxZTE5MzMwMWU=
9
+ NjRlYjYzMzUzOGFiMTljNmYxNzNhMWUzMjE5OWZiNmQ0MDFlZjNiMzI1OGIy
10
+ ZjVkNmQxNWMzMzllZDU1NDcxMmFmMGUyYjA0ZGYwYmY3NGI0ZTJiZjE5NzVj
11
+ NWU1NzNjZGRkZDc0NjUzYjZiZGE4MjQ2ZWY2ODY3YWE4NzhmODA=
12
12
  data.tar.gz: !binary |-
13
- N2MyYjE2ZjNjNDRjYWRhY2IxYjg4NDc3ZjYwOWJhMzQxZmZhMjY1NWIwMmYw
14
- MTQ4ZjBiY2FjMmIxMTY3ZGQ0ZjBlNzA2ZDFkZWViMmNjMTAzNmExY2E5NWQ3
15
- MmEzMTNlNjU5N2YyOGQ1MzY2ZTA1MDQ5MzlhMmQ3MzA0NGRhYzM=
13
+ NzYwZGVlMWVlNWY5NTk3ODU0YTM0MzJmNGI2ZjljM2RhODU3MDk4NjMyOTJm
14
+ MTc1N2I0MWQyZTFiYWNlMmUwZDEzYWI0M2M2ODA2YzNlZWY4Y2JlN2YzZjcw
15
+ MWQzZjc5MTUwYTFkZmQyZTFiMjQxZmY1NjRiY2M5NzdjODYzNTY=
@@ -1,3 +1,7 @@
1
+ ## 0.2.13 / 2013-03-28
2
+
3
+ * [improvement] More verbose output for redeploy, start and stop
4
+
1
5
  ## 0.2.12 / 2013-03-25
2
6
 
3
7
  * [bug] shelly check recognizes puma as allowed web server
@@ -111,15 +111,20 @@ module Shelly
111
111
  end
112
112
 
113
113
  def start
114
- shelly.start_cloud(code_name)
114
+ shelly.start_cloud(code_name)["deployment"]["id"]
115
115
  end
116
116
 
117
117
  def stop
118
- shelly.stop_cloud(code_name)
118
+ shelly.stop_cloud(code_name)["deployment"]["id"]
119
119
  end
120
120
 
121
+ # returns the id of created deployment
121
122
  def redeploy
122
- shelly.redeploy(code_name)
123
+ shelly.redeploy(code_name)["deployment"]["id"]
124
+ end
125
+
126
+ def deployment(deployment_id)
127
+ shelly.deployment(code_name, deployment_id)
123
128
  end
124
129
 
125
130
  def self.guess_code_name
@@ -194,10 +194,9 @@ module Shelly
194
194
  method_option :cloud, :type => :string, :aliases => "-c", :desc => "Specify cloud"
195
195
  def start
196
196
  app = multiple_clouds(options[:cloud], "start")
197
- app.start
197
+ deployment_id = app.start
198
198
  say "Starting cloud #{app}.", :green
199
- say "This can take up to 10 minutes."
200
- say "Check status with: `shelly list`"
199
+ deployment_progress(app, deployment_id, "Starting cloud")
201
200
  rescue Client::ConflictException => e
202
201
  case e[:state]
203
202
  when "running"
@@ -267,9 +266,9 @@ Wait until cloud is in 'turned off' state and try again.}
267
266
  app = multiple_clouds(options[:cloud], "stop")
268
267
  stop_question = "Are you sure you want to shut down '#{app}' cloud (yes/no):"
269
268
  if ask(stop_question) == "yes"
270
- app.stop
269
+ deployment_id = app.stop
271
270
  say_new_line
272
- say "Cloud '#{app}' stopped"
271
+ deployment_progress(app, deployment_id, "Stopping cloud")
273
272
  end
274
273
  rescue Client::ConflictException => e
275
274
  case e[:state]
@@ -368,8 +367,9 @@ Wait until cloud is in 'turned off' state and try again.}
368
367
  :desc => "Specify which cloud to redeploy application for"
369
368
  def redeploy
370
369
  app = multiple_clouds(options[:cloud], "redeploy")
371
- app.redeploy
370
+ deployment_id = app.redeploy
372
371
  say "Redeploying your application for cloud '#{app}'", :green
372
+ deployment_progress(app, deployment_id, "Cloud redeploy")
373
373
  rescue Client::ConflictException => e
374
374
  case e[:state]
375
375
  when "deploying", "configuring"
@@ -202,6 +202,10 @@ module Shelly
202
202
  post("/apps/#{cloud}/deploys")
203
203
  end
204
204
 
205
+ def deployment(cloud, deployment_id)
206
+ get("/apps/#{cloud}/deploys/#{deployment_id}")
207
+ end
208
+
205
209
  def query(options = {})
206
210
  "?" + options.map { |k, v|
207
211
  URI.escape(k.to_s) + "=" + URI.escape(v.to_s) }.join("&")
@@ -140,5 +140,29 @@ More info at http://git-scm.com/book/en/Git-Basics-Getting-a-Git-Repository}
140
140
  end
141
141
  say " #{indicator} #{message}"
142
142
  end
143
+
144
+ def deployment_progress(app, deployment_id, action_name)
145
+ printed_messages = []
146
+ loop do
147
+ @deployment = app.deployment(deployment_id)
148
+ new_messages = @deployment["messages"] - printed_messages
149
+ new_messages.each do |message|
150
+ color = (message =~ /failed/) ? :red : :green
151
+ say message, color
152
+ printed_messages << message
153
+ end
154
+
155
+ break if @deployment["state"] != "running"
156
+ sleep 5
157
+ end
158
+
159
+ say_new_line
160
+
161
+ if @deployment["result"] == "success"
162
+ say "#{action_name} successful", :green
163
+ else
164
+ say "#{action_name} failed. See logs with `shelly deploy show last`", :red
165
+ end
166
+ end
143
167
  end
144
168
  end
@@ -1,3 +1,3 @@
1
1
  module Shelly
2
- VERSION = "0.2.12"
2
+ VERSION = "0.2.13"
3
3
  end
@@ -196,13 +196,15 @@ describe Shelly::App do
196
196
 
197
197
  describe "#start & #stop" do
198
198
  it "should start cloud" do
199
- @client.should_receive(:start_cloud).with("foo-staging")
200
- @app.start
199
+ @client.should_receive(:start_cloud).with("foo-staging").
200
+ and_return("deployment" => {"id" => "DEPLOYMENT_ID"})
201
+ @app.start.should == "DEPLOYMENT_ID"
201
202
  end
202
203
 
203
204
  it "should stop cloud" do
204
- @client.should_receive(:stop_cloud).with("foo-staging")
205
- @app.stop
205
+ @client.should_receive(:stop_cloud).with("foo-staging").
206
+ and_return("deployment" => {"id" => "DEPLOYMENT_ID"})
207
+ @app.stop.should == "DEPLOYMENT_ID"
206
208
  end
207
209
  end
208
210
 
@@ -288,8 +290,9 @@ describe Shelly::App do
288
290
 
289
291
  describe "#redeploy" do
290
292
  it "should redeploy app via API" do
291
- @client.should_receive(:redeploy).with("foo-staging")
292
- @app.redeploy
293
+ @client.should_receive(:redeploy).with("foo-staging").
294
+ and_return("deployment" => {"id" => "DEPLOYMENT_ID"})
295
+ @app.redeploy.should == "DEPLOYMENT_ID"
293
296
  end
294
297
  end
295
298
 
@@ -679,6 +679,10 @@ More info at http://git-scm.com/book/en/Git-Basics-Getting-a-Git-Repository\e[0m
679
679
  @client.stub(:apps).and_return([
680
680
  {"code_name" => "foo-production", "state" => "running"},
681
681
  {"code_name" => "foo-staging", "state" => "no_code"}])
682
+ @client.stub(:start_cloud => {"deployment" => {"id" => "DEPLOYMENT_ID"}})
683
+ @deployment = {"messages" => ["message1"],
684
+ "result" => "success", "state" => "finished"}
685
+ @app.stub(:deployment => @deployment)
682
686
  end
683
687
 
684
688
  it "should ensure user has logged in" do
@@ -687,10 +691,9 @@ More info at http://git-scm.com/book/en/Git-Basics-Getting-a-Git-Repository\e[0m
687
691
 
688
692
  context "single cloud in Cloudfile" do
689
693
  it "should start the cloud" do
690
- @client.stub(:start_cloud)
691
694
  $stdout.should_receive(:puts).with(green "Starting cloud foo-production.")
692
- $stdout.should_receive(:puts).with("This can take up to 10 minutes.")
693
- $stdout.should_receive(:puts).with("Check status with: `shelly list`")
695
+ $stdout.should_receive(:puts).with(green "message1")
696
+ $stdout.should_receive(:puts).with(green "Starting cloud successful")
694
697
  invoke(@main, :start)
695
698
  end
696
699
  end
@@ -699,7 +702,6 @@ More info at http://git-scm.com/book/en/Git-Basics-Getting-a-Git-Repository\e[0m
699
702
  context "without Cloudfile" do
700
703
  it "should use cloud from params" do
701
704
  Dir.chdir("/projects")
702
- @client.stub(:start_cloud)
703
705
  $stdout.should_receive(:puts).with(green "Starting cloud foo-production.")
704
706
  @main.options = {:cloud => "foo-production"}
705
707
  invoke(@main, :start)
@@ -707,7 +709,6 @@ More info at http://git-scm.com/book/en/Git-Basics-Getting-a-Git-Repository\e[0m
707
709
 
708
710
  it "should ask user to specify cloud, list all clouds and exit" do
709
711
  Dir.chdir("/projects")
710
- @client.stub(:start_cloud)
711
712
  $stdout.should_receive(:puts).with(red "You have to specify cloud.")
712
713
  $stdout.should_receive(:puts).with("Select cloud using `shelly start --cloud CLOUD_NAME`")
713
714
  $stdout.should_receive(:puts).with(green "You have following clouds available:")
@@ -736,8 +737,11 @@ More info at http://git-scm.com/book/en/Git-Basics-Getting-a-Git-Repository\e[0m
736
737
 
737
738
  it "should fetch from command line which cloud to start" do
738
739
  @client.should_receive(:start_cloud).with("foo-staging")
740
+ @client.should_receive(:deployment).
741
+ with("foo-staging", "DEPLOYMENT_ID").and_return(@deployment)
739
742
  $stdout.should_receive(:puts).with(green "Starting cloud foo-staging.")
740
- $stdout.should_receive(:puts).with("Check status with: `shelly list`")
743
+ $stdout.should_receive(:puts).with(green "message1")
744
+ $stdout.should_receive(:puts).with(green "Starting cloud successful")
741
745
  @main.options = {:cloud => "foo-staging"}
742
746
  invoke(@main, :start)
743
747
  end
@@ -827,6 +831,9 @@ Wait until cloud is in 'turned off' state and try again.")
827
831
  @client.stub(:apps).and_return([{"code_name" => "foo-production"}, {"code_name" => "foo-staging"}])
828
832
  @app = Shelly::App.new("foo-production")
829
833
  Shelly::App.stub(:new).and_return(@app)
834
+ @client.stub(:stop_cloud => {"deployment" => {"id" => "DEPLOYMENT_ID"}})
835
+ @app.stub(:deployment => {"messages" => ["message1"],
836
+ "result" => "success", "state" => "finished"})
830
837
  end
831
838
 
832
839
  it "should ensure user has logged in" do
@@ -835,7 +842,6 @@ Wait until cloud is in 'turned off' state and try again.")
835
842
 
836
843
  # multiple_clouds is tested in main_spec.rb in describe "#start" block
837
844
  it "should ensure multiple_clouds check" do
838
- @client.stub(:stop_cloud)
839
845
  @main.should_receive(:multiple_clouds).and_return(@app)
840
846
  fake_stdin(["yes"]) do
841
847
  invoke(@main, :stop)
@@ -853,10 +859,10 @@ Wait until cloud is in 'turned off' state and try again.")
853
859
  end
854
860
 
855
861
  it "should stop the cloud" do
856
- @client.stub(:stop_cloud)
857
862
  $stdout.should_receive(:print).with("Are you sure you want to shut down 'foo-production' cloud (yes/no): ")
858
863
  $stdout.should_receive(:puts).with("\n")
859
- $stdout.should_receive(:puts).with("Cloud 'foo-production' stopped")
864
+ $stdout.should_receive(:puts).with(green "message1")
865
+ $stdout.should_receive(:puts).with(green "Stopping cloud successful")
860
866
  fake_stdin(["yes"]) do
861
867
  invoke(@main, :stop)
862
868
  end
@@ -1303,11 +1309,13 @@ Wait until cloud is in 'turned off' state and try again.")
1303
1309
  describe "#redeploy" do
1304
1310
  before do
1305
1311
  setup_project
1312
+ @client.stub(:redeploy => {"deployment" => {"id" => "DEPLOYMENT_ID"}})
1313
+ @app.stub(:deployment => {"messages" => ["message1"],
1314
+ "result" => "success", "state" => "finished"})
1306
1315
  end
1307
1316
 
1308
1317
  # multiple_clouds is tested in main_spec.rb in describe "#start" block
1309
1318
  it "should ensure multiple_clouds check" do
1310
- @client.stub(:redeploy)
1311
1319
  @main.should_receive(:multiple_clouds).and_return(@app)
1312
1320
  invoke(@main, :redeploy)
1313
1321
  end
@@ -1318,6 +1326,12 @@ Wait until cloud is in 'turned off' state and try again.")
1318
1326
  invoke(@main, :redeploy)
1319
1327
  end
1320
1328
 
1329
+ it "should print deployment messages" do
1330
+ $stdout.should_receive(:puts).with(green "message1")
1331
+ $stdout.should_receive(:puts).with(green "Cloud redeploy successful")
1332
+ invoke(@main, :redeploy)
1333
+ end
1334
+
1321
1335
  context "on redeploy failure" do
1322
1336
  %w(deploying configuring).each do |state|
1323
1337
  context "when application is in #{state} state" do
metadata CHANGED
@@ -1,183 +1,211 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: shelly
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.12
4
+ version: 0.2.13
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-03-25 00:00:00.000000000 Z
11
+ date: 2013-03-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: rspec
15
14
  requirement: !ruby/object:Gem::Requirement
16
15
  requirements:
17
16
  - - ~>
18
17
  - !ruby/object:Gem::Version
19
18
  version: 2.11.0
20
- type: :development
21
- prerelease: false
22
19
  version_requirements: !ruby/object:Gem::Requirement
23
20
  requirements:
24
21
  - - ~>
25
22
  - !ruby/object:Gem::Version
26
23
  version: 2.11.0
24
+ type: :development
25
+ prerelease: false
26
+ name: rspec
27
27
  - !ruby/object:Gem::Dependency
28
- name: rake
29
28
  requirement: !ruby/object:Gem::Requirement
30
29
  requirements:
31
30
  - - ! '>='
32
31
  - !ruby/object:Gem::Version
33
32
  version: '0'
34
- type: :development
35
- prerelease: false
36
33
  version_requirements: !ruby/object:Gem::Requirement
37
34
  requirements:
38
35
  - - ! '>='
39
36
  - !ruby/object:Gem::Version
40
37
  version: '0'
38
+ type: :development
39
+ prerelease: false
40
+ name: rake
41
41
  - !ruby/object:Gem::Dependency
42
- name: guard
43
42
  requirement: !ruby/object:Gem::Requirement
44
43
  requirements:
45
44
  - - ! '>='
46
45
  - !ruby/object:Gem::Version
47
46
  version: '0'
48
- type: :development
49
- prerelease: false
50
47
  version_requirements: !ruby/object:Gem::Requirement
51
48
  requirements:
52
49
  - - ! '>='
53
50
  - !ruby/object:Gem::Version
54
51
  version: '0'
52
+ type: :development
53
+ prerelease: false
54
+ name: guard
55
55
  - !ruby/object:Gem::Dependency
56
- name: guard-rspec
57
56
  requirement: !ruby/object:Gem::Requirement
58
57
  requirements:
59
58
  - - ! '>='
60
59
  - !ruby/object:Gem::Version
61
60
  version: '0'
62
- type: :development
63
- prerelease: false
64
61
  version_requirements: !ruby/object:Gem::Requirement
65
62
  requirements:
66
63
  - - ! '>='
67
64
  - !ruby/object:Gem::Version
68
65
  version: '0'
66
+ type: :development
67
+ prerelease: false
68
+ name: guard-rspec
69
69
  - !ruby/object:Gem::Dependency
70
- name: simplecov
71
70
  requirement: !ruby/object:Gem::Requirement
72
71
  requirements:
73
72
  - - ! '>='
74
73
  - !ruby/object:Gem::Version
75
74
  version: '0'
76
- type: :development
77
- prerelease: false
78
75
  version_requirements: !ruby/object:Gem::Requirement
79
76
  requirements:
80
77
  - - ! '>='
81
78
  - !ruby/object:Gem::Version
82
79
  version: '0'
80
+ type: :development
81
+ prerelease: false
82
+ name: simplecov
83
83
  - !ruby/object:Gem::Dependency
84
- name: fakefs
85
84
  requirement: !ruby/object:Gem::Requirement
86
85
  requirements:
87
86
  - - ! '>='
88
87
  - !ruby/object:Gem::Version
89
88
  version: '0'
89
+ version_requirements: !ruby/object:Gem::Requirement
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
90
94
  type: :development
91
95
  prerelease: false
96
+ name: ruby_gntp
97
+ - !ruby/object:Gem::Dependency
98
+ requirement: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - ! '>='
101
+ - !ruby/object:Gem::Version
102
+ version: '0'
92
103
  version_requirements: !ruby/object:Gem::Requirement
93
104
  requirements:
94
105
  - - ! '>='
95
106
  - !ruby/object:Gem::Version
96
107
  version: '0'
108
+ type: :development
109
+ prerelease: false
110
+ name: rb-fsevent
97
111
  - !ruby/object:Gem::Dependency
98
- name: fakeweb
99
112
  requirement: !ruby/object:Gem::Requirement
100
113
  requirements:
101
114
  - - ! '>='
102
115
  - !ruby/object:Gem::Version
103
116
  version: '0'
117
+ version_requirements: !ruby/object:Gem::Requirement
118
+ requirements:
119
+ - - ! '>='
120
+ - !ruby/object:Gem::Version
121
+ version: '0'
104
122
  type: :development
105
123
  prerelease: false
124
+ name: fakefs
125
+ - !ruby/object:Gem::Dependency
126
+ requirement: !ruby/object:Gem::Requirement
127
+ requirements:
128
+ - - ! '>='
129
+ - !ruby/object:Gem::Version
130
+ version: '0'
106
131
  version_requirements: !ruby/object:Gem::Requirement
107
132
  requirements:
108
133
  - - ! '>='
109
134
  - !ruby/object:Gem::Version
110
135
  version: '0'
136
+ type: :development
137
+ prerelease: false
138
+ name: fakeweb
111
139
  - !ruby/object:Gem::Dependency
112
- name: wijet-thor
113
140
  requirement: !ruby/object:Gem::Requirement
114
141
  requirements:
115
142
  - - ~>
116
143
  - !ruby/object:Gem::Version
117
144
  version: 0.14.9
118
- type: :runtime
119
- prerelease: false
120
145
  version_requirements: !ruby/object:Gem::Requirement
121
146
  requirements:
122
147
  - - ~>
123
148
  - !ruby/object:Gem::Version
124
149
  version: 0.14.9
150
+ type: :runtime
151
+ prerelease: false
152
+ name: wijet-thor
125
153
  - !ruby/object:Gem::Dependency
126
- name: rest-client
127
154
  requirement: !ruby/object:Gem::Requirement
128
155
  requirements:
129
156
  - - ! '>='
130
157
  - !ruby/object:Gem::Version
131
158
  version: '0'
132
- type: :runtime
133
- prerelease: false
134
159
  version_requirements: !ruby/object:Gem::Requirement
135
160
  requirements:
136
161
  - - ! '>='
137
162
  - !ruby/object:Gem::Version
138
163
  version: '0'
164
+ type: :runtime
165
+ prerelease: false
166
+ name: rest-client
139
167
  - !ruby/object:Gem::Dependency
140
- name: json
141
168
  requirement: !ruby/object:Gem::Requirement
142
169
  requirements:
143
170
  - - ! '>='
144
171
  - !ruby/object:Gem::Version
145
172
  version: '0'
146
- type: :runtime
147
- prerelease: false
148
173
  version_requirements: !ruby/object:Gem::Requirement
149
174
  requirements:
150
175
  - - ! '>='
151
176
  - !ruby/object:Gem::Version
152
177
  version: '0'
178
+ type: :runtime
179
+ prerelease: false
180
+ name: json
153
181
  - !ruby/object:Gem::Dependency
154
- name: progressbar
155
182
  requirement: !ruby/object:Gem::Requirement
156
183
  requirements:
157
184
  - - ! '>='
158
185
  - !ruby/object:Gem::Version
159
186
  version: '0'
160
- type: :runtime
161
- prerelease: false
162
187
  version_requirements: !ruby/object:Gem::Requirement
163
188
  requirements:
164
189
  - - ! '>='
165
190
  - !ruby/object:Gem::Version
166
191
  version: '0'
192
+ type: :runtime
193
+ prerelease: false
194
+ name: progressbar
167
195
  - !ruby/object:Gem::Dependency
168
- name: launchy
169
196
  requirement: !ruby/object:Gem::Requirement
170
197
  requirements:
171
198
  - - ! '>='
172
199
  - !ruby/object:Gem::Version
173
200
  version: '0'
174
- type: :runtime
175
- prerelease: false
176
201
  version_requirements: !ruby/object:Gem::Requirement
177
202
  requirements:
178
203
  - - ! '>='
179
204
  - !ruby/object:Gem::Version
180
205
  version: '0'
206
+ type: :runtime
207
+ prerelease: false
208
+ name: launchy
181
209
  description: Tool for managing applications and clouds at shellycloud.com
182
210
  email:
183
211
  - devs@shellycloud.com
@@ -265,8 +293,29 @@ required_rubygems_version: !ruby/object:Gem::Requirement
265
293
  version: '0'
266
294
  requirements: []
267
295
  rubyforge_project: shelly
268
- rubygems_version: 2.0.2
296
+ rubygems_version: 2.0.3
269
297
  signing_key:
270
298
  specification_version: 4
271
299
  summary: Shelly Cloud command line tool
272
- test_files: []
300
+ test_files:
301
+ - spec/helpers.rb
302
+ - spec/input_faker.rb
303
+ - spec/shelly/app_spec.rb
304
+ - spec/shelly/backup_spec.rb
305
+ - spec/shelly/cli/backup_spec.rb
306
+ - spec/shelly/cli/config_spec.rb
307
+ - spec/shelly/cli/deploy_spec.rb
308
+ - spec/shelly/cli/file_spec.rb
309
+ - spec/shelly/cli/main_spec.rb
310
+ - spec/shelly/cli/organization_spec.rb
311
+ - spec/shelly/cli/runner_spec.rb
312
+ - spec/shelly/cli/user_spec.rb
313
+ - spec/shelly/client_spec.rb
314
+ - spec/shelly/cloudfile_spec.rb
315
+ - spec/shelly/download_progress_bar_spec.rb
316
+ - spec/shelly/model_spec.rb
317
+ - spec/shelly/organization_spec.rb
318
+ - spec/shelly/structure_validator_spec.rb
319
+ - spec/shelly/user_spec.rb
320
+ - spec/spec_helper.rb
321
+ - spec/thor/options_spec.rb