shelly 0.1.3 → 0.1.4.pre
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.
- data/lib/shelly/app.rb +6 -16
- data/lib/shelly/cli/main.rb +17 -27
- data/lib/shelly/helpers.rb +11 -0
- data/lib/shelly/version.rb +1 -1
- data/lib/thor/thor.rb +6 -0
- data/spec/shelly/app_spec.rb +5 -23
- data/spec/shelly/cli/backup_spec.rb +2 -1
- data/spec/shelly/cli/main_spec.rb +16 -82
- data/spec/spec_helper.rb +7 -0
- metadata +111 -36
data/lib/shelly/app.rb
CHANGED
@@ -177,22 +177,8 @@ module Shelly
|
|
177
177
|
shelly.app_delete_config(code_name, path)
|
178
178
|
end
|
179
179
|
|
180
|
-
# returns result of execution of given code, or false when app was not
|
181
|
-
# running
|
182
|
-
def run(file_name_or_code)
|
183
|
-
code = if File.exists?(file_name_or_code)
|
184
|
-
File.read(file_name_or_code)
|
185
|
-
else
|
186
|
-
file_name_or_code
|
187
|
-
end
|
188
|
-
|
189
|
-
response = shelly.command(code_name, code, :ruby)
|
190
|
-
response["result"]
|
191
|
-
end
|
192
|
-
|
193
180
|
def rake(task)
|
194
|
-
|
195
|
-
response["result"]
|
181
|
+
ssh("rake_runner \"#{task}\"")
|
196
182
|
end
|
197
183
|
|
198
184
|
def attributes
|
@@ -236,8 +222,12 @@ module Shelly
|
|
236
222
|
end
|
237
223
|
|
238
224
|
def console
|
225
|
+
ssh
|
226
|
+
end
|
227
|
+
|
228
|
+
def ssh(command = "")
|
239
229
|
params = node_and_port
|
240
|
-
exec "ssh -o StrictHostKeyChecking=no -p #{params['port']} -l #{params['user']} #{params['node_ip']}"
|
230
|
+
exec "ssh -o StrictHostKeyChecking=no -p #{params['port']} -l #{params['user']} #{params['node_ip']} #{command}"
|
241
231
|
end
|
242
232
|
|
243
233
|
def upload(path)
|
data/lib/shelly/cli/main.rb
CHANGED
@@ -112,6 +112,7 @@ module Shelly
|
|
112
112
|
say_error "shelly add --code-name=#{app.code_name} --databases=#{app.databases.join(',')} --size=#{app.size}"
|
113
113
|
end
|
114
114
|
|
115
|
+
map "status" => :list
|
115
116
|
desc "list", "List available clouds"
|
116
117
|
def list
|
117
118
|
user = Shelly::User.new
|
@@ -131,7 +132,6 @@ module Shelly
|
|
131
132
|
end
|
132
133
|
end
|
133
134
|
|
134
|
-
map "status" => :list
|
135
135
|
map "ip" => :info
|
136
136
|
method_option :cloud, :type => :string, :aliases => "-c", :desc => "Specify cloud"
|
137
137
|
desc "info", "Show basic information about cloud"
|
@@ -282,35 +282,16 @@ We have been notified about it. We will be adding new resources shortly}
|
|
282
282
|
say "You have been successfully logged out" if user.delete_credentials
|
283
283
|
end
|
284
284
|
|
285
|
-
desc "execute CODE", "Run code on one of application servers"
|
286
|
-
method_option :cloud, :type => :string, :aliases => "-c", :desc => "Specify cloud"
|
287
|
-
long_desc %{
|
288
|
-
Run code given in parameter on one of application servers.
|
289
|
-
If a file name is given, run contents of that file."
|
290
|
-
}
|
291
|
-
def execute(file_name_or_code)
|
292
|
-
app = multiple_clouds(options[:cloud], "execute #{file_name_or_code}")
|
293
|
-
|
294
|
-
result = app.run(file_name_or_code)
|
295
|
-
say result
|
296
|
-
|
297
|
-
rescue Client::APIException => e
|
298
|
-
if e[:message] == "App not running"
|
299
|
-
say_error "Cloud #{app} is not running. Cannot run code."
|
300
|
-
else
|
301
|
-
raise
|
302
|
-
end
|
303
|
-
end
|
304
|
-
|
305
285
|
desc "rake TASK", "Run rake task"
|
306
286
|
method_option :cloud, :type => :string, :aliases => "-c", :desc => "Specify cloud"
|
307
287
|
def rake(task = nil)
|
308
288
|
task = rake_args.join(" ")
|
309
289
|
app = multiple_clouds(options[:cloud], "rake #{task}")
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
|
290
|
+
app.rake(task)
|
291
|
+
rescue Client::NotFoundException => e
|
292
|
+
raise unless e.resource == :cloud
|
293
|
+
say_error "You have no access to '#{app}' cloud defined in Cloudfile"
|
294
|
+
rescue Client::ConflictException
|
314
295
|
say_error "Cloud #{app} is not running. Cannot run rake task."
|
315
296
|
end
|
316
297
|
|
@@ -343,6 +324,12 @@ We have been notified about it. We will be adding new resources shortly}
|
|
343
324
|
app.open
|
344
325
|
end
|
345
326
|
|
327
|
+
desc "execute CODE", "Run code on one of application servers"
|
328
|
+
method_option :cloud, :type => :string, :aliases => "-c", :desc => "Specify cloud"
|
329
|
+
def execute(file)
|
330
|
+
say_error "`shelly execute` is deprecated and will be removed in a future release of shelly gem, please use `shelly console`"
|
331
|
+
end
|
332
|
+
|
346
333
|
desc "console", "Open application console"
|
347
334
|
method_option :cloud, :type => :string, :aliases => "-c", :desc => "Specify cloud"
|
348
335
|
def console
|
@@ -351,19 +338,22 @@ We have been notified about it. We will be adding new resources shortly}
|
|
351
338
|
rescue Client::NotFoundException => e
|
352
339
|
raise unless e.resource == :cloud
|
353
340
|
say_error "You have no access to '#{app}' cloud defined in Cloudfile"
|
354
|
-
rescue Client::
|
341
|
+
rescue Client::ConflictException
|
355
342
|
say_error "Cloud #{app} is not running. Cannot run console."
|
356
343
|
end
|
357
344
|
|
358
345
|
desc "upload PATH", "Upload files to persisted data storage"
|
359
346
|
method_option :cloud, :type => :string, :aliases => "-c", :desc => "Specify cloud"
|
360
347
|
def upload(path)
|
348
|
+
unless command_exists?("rsync")
|
349
|
+
say_error "You need to install rsync in order to use `shelly upload`"
|
350
|
+
end
|
361
351
|
app = multiple_clouds(options[:cloud], "upload #{path}")
|
362
352
|
app.upload(path)
|
363
353
|
rescue Client::NotFoundException => e
|
364
354
|
raise unless e.resource == :cloud
|
365
355
|
say_error "You have no access to '#{app}' cloud defined in Cloudfile"
|
366
|
-
rescue Client::
|
356
|
+
rescue Client::ConflictException
|
367
357
|
say_error "Cloud #{app} is not running. Cannot upload files."
|
368
358
|
end
|
369
359
|
|
data/lib/shelly/helpers.rb
CHANGED
@@ -81,6 +81,17 @@ module Shelly
|
|
81
81
|
say_error "You are not logged in. To log in use: `shelly login`"
|
82
82
|
end
|
83
83
|
|
84
|
+
def command_exists?(cmd)
|
85
|
+
exts = ENV['PATHEXT'] ? ENV['PATHEXT'].split(';') : ['']
|
86
|
+
ENV['PATH'].split(File::PATH_SEPARATOR).each do |path|
|
87
|
+
exts.each { |ext|
|
88
|
+
exe = "#{path}/#{cmd}#{ext}"
|
89
|
+
return exe if File.executable? exe
|
90
|
+
}
|
91
|
+
end
|
92
|
+
return false
|
93
|
+
end
|
94
|
+
|
84
95
|
def multiple_clouds(cloud, action)
|
85
96
|
clouds = Cloudfile.new.clouds
|
86
97
|
if clouds && clouds.count > 1 && cloud.nil?
|
data/lib/shelly/version.rb
CHANGED
data/lib/thor/thor.rb
CHANGED
@@ -28,5 +28,11 @@ class Thor
|
|
28
28
|
ENV["THOR_DEBUG"] == "1" ? (raise e) : config[:shell].error(e.message)
|
29
29
|
exit(1) if exit_on_failure?
|
30
30
|
end
|
31
|
+
|
32
|
+
# We overwrite this method so namespace is show
|
33
|
+
# shelly *backup* restore FILENAME
|
34
|
+
def handle_argument_error(task, error)
|
35
|
+
raise InvocationError, "#{task.name.inspect} was called incorrectly. Call as #{self.banner(task, nil, self != 'Shelly::CLI::Main').inspect}."
|
36
|
+
end
|
31
37
|
end
|
32
38
|
end
|
data/spec/shelly/app_spec.rb
CHANGED
@@ -358,30 +358,12 @@ config
|
|
358
358
|
end
|
359
359
|
end
|
360
360
|
|
361
|
-
describe "#run" do
|
362
|
-
before do
|
363
|
-
@response = {
|
364
|
-
"result" => "4"
|
365
|
-
}
|
366
|
-
@client.stub(:command).and_return(@response)
|
367
|
-
File.open("to_run.rb", 'w') {|f| f.write("User.count\n") }
|
368
|
-
end
|
369
|
-
|
370
|
-
it "should return result of executed code" do
|
371
|
-
@client.should_receive(:command).with("foo-staging", "2 + 2", :ruby)
|
372
|
-
@app.run("2 + 2").should == "4"
|
373
|
-
end
|
374
|
-
|
375
|
-
it "should send contents of file when file exists" do
|
376
|
-
@client.should_receive(:command).with("foo-staging", "User.count\n", :ruby)
|
377
|
-
@app.run("to_run.rb")
|
378
|
-
end
|
379
|
-
end
|
380
|
-
|
381
361
|
describe "#rake" do
|
382
362
|
it "should return result of rake task" do
|
383
|
-
@client.
|
384
|
-
|
363
|
+
@client.stub(:node_and_port).and_return(
|
364
|
+
{"node_ip" => "10.0.0.1", "port" => "40010", "user" => "foo"})
|
365
|
+
@app.should_receive(:exec).with("ssh -o StrictHostKeyChecking=no -p 40010 -l foo 10.0.0.1 rake_runner \"test\"")
|
366
|
+
@app.rake("test")
|
385
367
|
end
|
386
368
|
end
|
387
369
|
|
@@ -417,7 +399,7 @@ config
|
|
417
399
|
it "should run ssh with all parameters" do
|
418
400
|
@client.stub(:node_and_port).and_return(
|
419
401
|
{"node_ip" => "10.0.0.1", "port" => "40010", "user" => "foo"})
|
420
|
-
@app.should_receive(:exec).with("ssh -o StrictHostKeyChecking=no -p 40010 -l foo 10.0.0.1")
|
402
|
+
@app.should_receive(:exec).with("ssh -o StrictHostKeyChecking=no -p 40010 -l foo 10.0.0.1 ")
|
421
403
|
@app.console
|
422
404
|
end
|
423
405
|
end
|
@@ -1,6 +1,7 @@
|
|
1
1
|
require "spec_helper"
|
2
2
|
require "shelly/cli/backup"
|
3
3
|
require "shelly/download_progress_bar"
|
4
|
+
require "open3"
|
4
5
|
|
5
6
|
describe Shelly::CLI::Backup do
|
6
7
|
before do
|
@@ -192,7 +193,7 @@ describe Shelly::CLI::Backup do
|
|
192
193
|
end
|
193
194
|
end
|
194
195
|
|
195
|
-
context "
|
196
|
+
context "when answering no" do
|
196
197
|
it "should cancel restore database" do
|
197
198
|
$stdout.should_receive(:puts).with("You are about restore database postgre for cloud foo-staging to state from better.tar.gz")
|
198
199
|
$stdout.should_receive(:print).with("I want to restore the database (yes/no): ")
|
@@ -1112,67 +1112,6 @@ We have been notified about it. We will be adding new resources shortly")
|
|
1112
1112
|
end
|
1113
1113
|
end
|
1114
1114
|
|
1115
|
-
describe "#execute" do
|
1116
|
-
before do
|
1117
|
-
FileUtils.mkdir_p("/projects/foo")
|
1118
|
-
Dir.chdir("/projects/foo")
|
1119
|
-
File.open("Cloudfile", 'w') {|f| f.write("foo-production:\n") }
|
1120
|
-
@user = Shelly::User.new
|
1121
|
-
@user.stub(:token)
|
1122
|
-
Shelly::User.stub(:new).and_return(@user)
|
1123
|
-
@client.stub(:apps).and_return([{"code_name" => "foo-production"},
|
1124
|
-
{"code_name" => "foo-staging"}])
|
1125
|
-
@app = Shelly::App.new("foo-production")
|
1126
|
-
Shelly::App.stub(:new).and_return(@app)
|
1127
|
-
File.open("to_execute.rb", 'w') {|f| f.write("User.count") }
|
1128
|
-
end
|
1129
|
-
|
1130
|
-
it "should ensure user has logged in" do
|
1131
|
-
hooks(@main, :execute).should include(:logged_in?)
|
1132
|
-
end
|
1133
|
-
|
1134
|
-
# multiple_clouds is tested in main_spec.rb in describe "#start" block
|
1135
|
-
it "should ensure multiple_clouds check" do
|
1136
|
-
@client.should_receive(:command).with("foo-production", "User.count", :ruby).
|
1137
|
-
and_return({"result" => "3"})
|
1138
|
-
@main.should_receive(:multiple_clouds).and_return(@app)
|
1139
|
-
invoke(@main, :execute, "to_execute.rb")
|
1140
|
-
end
|
1141
|
-
|
1142
|
-
it "should execute code for the cloud" do
|
1143
|
-
@client.should_receive(:command).with("foo-production", "User.count", :ruby).
|
1144
|
-
and_return({"result" => "3"})
|
1145
|
-
$stdout.should_receive(:puts).with("3")
|
1146
|
-
invoke(@main, :execute, "to_execute.rb")
|
1147
|
-
end
|
1148
|
-
|
1149
|
-
it "should run code when no file from parameter is found" do
|
1150
|
-
@client.should_receive(:command).with("foo-production", "2 + 2", :ruby).
|
1151
|
-
and_return({"result" => "4"})
|
1152
|
-
$stdout.should_receive(:puts).with("4")
|
1153
|
-
invoke(@main, :execute, "2 + 2")
|
1154
|
-
end
|
1155
|
-
|
1156
|
-
context "cloud is not in running state" do
|
1157
|
-
it "should print error" do
|
1158
|
-
@client.should_receive(:command).with("foo-staging", "2 + 2", :ruby).
|
1159
|
-
and_raise(Shelly::Client::APIException.new(
|
1160
|
-
{"message" => "App not running"}, 504))
|
1161
|
-
$stdout.should_receive(:puts).
|
1162
|
-
with(red "Cloud foo-staging is not running. Cannot run code.")
|
1163
|
-
@main.options = {:cloud => "foo-staging"}
|
1164
|
-
lambda { invoke(@main, :execute, "2 + 2") }.should raise_error(SystemExit)
|
1165
|
-
end
|
1166
|
-
|
1167
|
-
it "should re-raise other exceptions" do
|
1168
|
-
@client.should_receive(:command).with("foo-staging", "2 + 2", :ruby).
|
1169
|
-
and_raise(Exception)
|
1170
|
-
@main.options = {:cloud => "foo-staging"}
|
1171
|
-
lambda { invoke(@main, :execute, "2 + 2") }.should raise_error(Exception)
|
1172
|
-
end
|
1173
|
-
end
|
1174
|
-
end
|
1175
|
-
|
1176
1115
|
describe "#rake" do
|
1177
1116
|
before do
|
1178
1117
|
FileUtils.mkdir_p("/projects/foo")
|
@@ -1192,25 +1131,16 @@ We have been notified about it. We will be adding new resources shortly")
|
|
1192
1131
|
|
1193
1132
|
# multiple_clouds is tested in main_spec.rb in describe "#start" block
|
1194
1133
|
it "should ensure multiple_clouds check" do
|
1195
|
-
@
|
1196
|
-
and_return({"result" => "OK"})
|
1134
|
+
@app.stub(:rake)
|
1197
1135
|
@main.should_receive(:multiple_clouds).and_return(@app)
|
1198
1136
|
invoke(@main, :rake, "db:migrate")
|
1199
1137
|
end
|
1200
1138
|
|
1201
|
-
it "should invoke
|
1202
|
-
@
|
1203
|
-
$stdout.should_receive(:puts).with("OK")
|
1139
|
+
it "should invoke rake task" do
|
1140
|
+
@app.should_receive(:rake).with("db:migrate")
|
1204
1141
|
invoke(@main, :rake, "db:migrate")
|
1205
1142
|
end
|
1206
1143
|
|
1207
|
-
it "should pass rake arguments to the client" do
|
1208
|
-
@main.stub(:rake_args).and_return(%w(-T db:schema))
|
1209
|
-
@client.should_receive(:command).with("foo-production", "-T db:schema", :rake).and_return("result" => "OK")
|
1210
|
-
$stdout.should_receive(:puts).with("OK")
|
1211
|
-
invoke(@main, :rake, nil)
|
1212
|
-
end
|
1213
|
-
|
1214
1144
|
describe "#rake_args" do
|
1215
1145
|
before { @main.unstub!(:rake_args) }
|
1216
1146
|
|
@@ -1227,13 +1157,11 @@ We have been notified about it. We will be adding new resources shortly")
|
|
1227
1157
|
|
1228
1158
|
context "cloud is not in running state" do
|
1229
1159
|
it "should print error" do
|
1230
|
-
@client.
|
1231
|
-
|
1232
|
-
|
1233
|
-
|
1234
|
-
|
1235
|
-
@main.options = {:cloud => "foo-staging"}
|
1236
|
-
lambda { invoke(@main, :rake, "db:migrate") }.should raise_error(SystemExit)
|
1160
|
+
@client.stub(:node_and_port).and_raise(Shelly::Client::ConflictException)
|
1161
|
+
$stdout.should_receive(:puts).with(red "Cloud foo-production is not running. Cannot upload files.")
|
1162
|
+
lambda {
|
1163
|
+
invoke(@main, :upload, "some/path")
|
1164
|
+
}.should raise_error(SystemExit)
|
1237
1165
|
end
|
1238
1166
|
end
|
1239
1167
|
end
|
@@ -1355,7 +1283,7 @@ We have been notified about it. We will be adding new resources shortly")
|
|
1355
1283
|
|
1356
1284
|
context "Instances are not running" do
|
1357
1285
|
it "should display error" do
|
1358
|
-
@client.stub(:node_and_port).and_raise(Shelly::Client::
|
1286
|
+
@client.stub(:node_and_port).and_raise(Shelly::Client::ConflictException)
|
1359
1287
|
$stdout.should_receive(:puts).with(red "Cloud foo-production is not running. Cannot run console.")
|
1360
1288
|
lambda {
|
1361
1289
|
invoke(@main, :console)
|
@@ -1392,9 +1320,15 @@ We have been notified about it. We will be adding new resources shortly")
|
|
1392
1320
|
lambda { invoke(@main, :upload, "some/path") }.should raise_error(SystemExit)
|
1393
1321
|
end
|
1394
1322
|
|
1323
|
+
it "should exit if rsync isn't installed" do
|
1324
|
+
FakeFS::File.stub(:executable?).and_return(false)
|
1325
|
+
$stdout.should_receive(:puts).with(red "You need to install rsync in order to use `shelly upload`")
|
1326
|
+
lambda { invoke(@main, :upload, "some/path") }.should raise_error(SystemExit)
|
1327
|
+
end
|
1328
|
+
|
1395
1329
|
context "Instances are not running" do
|
1396
1330
|
it "should display error" do
|
1397
|
-
@client.stub(:node_and_port).and_raise(Shelly::Client::
|
1331
|
+
@client.stub(:node_and_port).and_raise(Shelly::Client::ConflictException)
|
1398
1332
|
$stdout.should_receive(:puts).with(red "Cloud foo-production is not running. Cannot upload files.")
|
1399
1333
|
lambda {
|
1400
1334
|
invoke(@main, :upload, "some/path")
|
data/spec/spec_helper.rb
CHANGED
metadata
CHANGED
@@ -1,19 +1,19 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: shelly
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
5
|
-
prerelease:
|
4
|
+
version: 0.1.4.pre
|
5
|
+
prerelease: 6
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Shelly Cloud team
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-05-
|
12
|
+
date: 2012-05-14 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rspec
|
16
|
-
requirement:
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,10 +21,15 @@ dependencies:
|
|
21
21
|
version: 2.8.0
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements:
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ~>
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 2.8.0
|
25
30
|
- !ruby/object:Gem::Dependency
|
26
31
|
name: rake
|
27
|
-
requirement:
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
28
33
|
none: false
|
29
34
|
requirements:
|
30
35
|
- - ! '>='
|
@@ -32,10 +37,15 @@ dependencies:
|
|
32
37
|
version: '0'
|
33
38
|
type: :development
|
34
39
|
prerelease: false
|
35
|
-
version_requirements:
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
36
46
|
- !ruby/object:Gem::Dependency
|
37
47
|
name: guard
|
38
|
-
requirement:
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
39
49
|
none: false
|
40
50
|
requirements:
|
41
51
|
- - ! '>='
|
@@ -43,10 +53,15 @@ dependencies:
|
|
43
53
|
version: '0'
|
44
54
|
type: :development
|
45
55
|
prerelease: false
|
46
|
-
version_requirements:
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
47
62
|
- !ruby/object:Gem::Dependency
|
48
63
|
name: guard-rspec
|
49
|
-
requirement:
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
50
65
|
none: false
|
51
66
|
requirements:
|
52
67
|
- - ! '>='
|
@@ -54,10 +69,15 @@ dependencies:
|
|
54
69
|
version: '0'
|
55
70
|
type: :development
|
56
71
|
prerelease: false
|
57
|
-
version_requirements:
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
58
78
|
- !ruby/object:Gem::Dependency
|
59
79
|
name: simplecov
|
60
|
-
requirement:
|
80
|
+
requirement: !ruby/object:Gem::Requirement
|
61
81
|
none: false
|
62
82
|
requirements:
|
63
83
|
- - ! '>='
|
@@ -65,10 +85,15 @@ dependencies:
|
|
65
85
|
version: '0'
|
66
86
|
type: :development
|
67
87
|
prerelease: false
|
68
|
-
version_requirements:
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ! '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '0'
|
69
94
|
- !ruby/object:Gem::Dependency
|
70
95
|
name: ruby_gntp
|
71
|
-
requirement:
|
96
|
+
requirement: !ruby/object:Gem::Requirement
|
72
97
|
none: false
|
73
98
|
requirements:
|
74
99
|
- - ! '>='
|
@@ -76,10 +101,15 @@ dependencies:
|
|
76
101
|
version: '0'
|
77
102
|
type: :development
|
78
103
|
prerelease: false
|
79
|
-
version_requirements:
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
80
110
|
- !ruby/object:Gem::Dependency
|
81
111
|
name: rb-fsevent
|
82
|
-
requirement:
|
112
|
+
requirement: !ruby/object:Gem::Requirement
|
83
113
|
none: false
|
84
114
|
requirements:
|
85
115
|
- - ! '>='
|
@@ -87,10 +117,15 @@ dependencies:
|
|
87
117
|
version: '0'
|
88
118
|
type: :development
|
89
119
|
prerelease: false
|
90
|
-
version_requirements:
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
none: false
|
122
|
+
requirements:
|
123
|
+
- - ! '>='
|
124
|
+
- !ruby/object:Gem::Version
|
125
|
+
version: '0'
|
91
126
|
- !ruby/object:Gem::Dependency
|
92
127
|
name: fakefs
|
93
|
-
requirement:
|
128
|
+
requirement: !ruby/object:Gem::Requirement
|
94
129
|
none: false
|
95
130
|
requirements:
|
96
131
|
- - ! '>='
|
@@ -98,10 +133,15 @@ dependencies:
|
|
98
133
|
version: '0'
|
99
134
|
type: :development
|
100
135
|
prerelease: false
|
101
|
-
version_requirements:
|
136
|
+
version_requirements: !ruby/object:Gem::Requirement
|
137
|
+
none: false
|
138
|
+
requirements:
|
139
|
+
- - ! '>='
|
140
|
+
- !ruby/object:Gem::Version
|
141
|
+
version: '0'
|
102
142
|
- !ruby/object:Gem::Dependency
|
103
143
|
name: fakeweb
|
104
|
-
requirement:
|
144
|
+
requirement: !ruby/object:Gem::Requirement
|
105
145
|
none: false
|
106
146
|
requirements:
|
107
147
|
- - ! '>='
|
@@ -109,10 +149,15 @@ dependencies:
|
|
109
149
|
version: '0'
|
110
150
|
type: :development
|
111
151
|
prerelease: false
|
112
|
-
version_requirements:
|
152
|
+
version_requirements: !ruby/object:Gem::Requirement
|
153
|
+
none: false
|
154
|
+
requirements:
|
155
|
+
- - ! '>='
|
156
|
+
- !ruby/object:Gem::Version
|
157
|
+
version: '0'
|
113
158
|
- !ruby/object:Gem::Dependency
|
114
159
|
name: wijet-thor
|
115
|
-
requirement:
|
160
|
+
requirement: !ruby/object:Gem::Requirement
|
116
161
|
none: false
|
117
162
|
requirements:
|
118
163
|
- - ~>
|
@@ -120,10 +165,15 @@ dependencies:
|
|
120
165
|
version: 0.14.7
|
121
166
|
type: :runtime
|
122
167
|
prerelease: false
|
123
|
-
version_requirements:
|
168
|
+
version_requirements: !ruby/object:Gem::Requirement
|
169
|
+
none: false
|
170
|
+
requirements:
|
171
|
+
- - ~>
|
172
|
+
- !ruby/object:Gem::Version
|
173
|
+
version: 0.14.7
|
124
174
|
- !ruby/object:Gem::Dependency
|
125
175
|
name: rest-client
|
126
|
-
requirement:
|
176
|
+
requirement: !ruby/object:Gem::Requirement
|
127
177
|
none: false
|
128
178
|
requirements:
|
129
179
|
- - ! '>='
|
@@ -131,10 +181,15 @@ dependencies:
|
|
131
181
|
version: '0'
|
132
182
|
type: :runtime
|
133
183
|
prerelease: false
|
134
|
-
version_requirements:
|
184
|
+
version_requirements: !ruby/object:Gem::Requirement
|
185
|
+
none: false
|
186
|
+
requirements:
|
187
|
+
- - ! '>='
|
188
|
+
- !ruby/object:Gem::Version
|
189
|
+
version: '0'
|
135
190
|
- !ruby/object:Gem::Dependency
|
136
191
|
name: json
|
137
|
-
requirement:
|
192
|
+
requirement: !ruby/object:Gem::Requirement
|
138
193
|
none: false
|
139
194
|
requirements:
|
140
195
|
- - ! '>='
|
@@ -142,10 +197,15 @@ dependencies:
|
|
142
197
|
version: '0'
|
143
198
|
type: :runtime
|
144
199
|
prerelease: false
|
145
|
-
version_requirements:
|
200
|
+
version_requirements: !ruby/object:Gem::Requirement
|
201
|
+
none: false
|
202
|
+
requirements:
|
203
|
+
- - ! '>='
|
204
|
+
- !ruby/object:Gem::Version
|
205
|
+
version: '0'
|
146
206
|
- !ruby/object:Gem::Dependency
|
147
207
|
name: progressbar
|
148
|
-
requirement:
|
208
|
+
requirement: !ruby/object:Gem::Requirement
|
149
209
|
none: false
|
150
210
|
requirements:
|
151
211
|
- - ! '>='
|
@@ -153,10 +213,15 @@ dependencies:
|
|
153
213
|
version: '0'
|
154
214
|
type: :runtime
|
155
215
|
prerelease: false
|
156
|
-
version_requirements:
|
216
|
+
version_requirements: !ruby/object:Gem::Requirement
|
217
|
+
none: false
|
218
|
+
requirements:
|
219
|
+
- - ! '>='
|
220
|
+
- !ruby/object:Gem::Version
|
221
|
+
version: '0'
|
157
222
|
- !ruby/object:Gem::Dependency
|
158
223
|
name: launchy
|
159
|
-
requirement:
|
224
|
+
requirement: !ruby/object:Gem::Requirement
|
160
225
|
none: false
|
161
226
|
requirements:
|
162
227
|
- - ! '>='
|
@@ -164,10 +229,15 @@ dependencies:
|
|
164
229
|
version: '0'
|
165
230
|
type: :runtime
|
166
231
|
prerelease: false
|
167
|
-
version_requirements:
|
232
|
+
version_requirements: !ruby/object:Gem::Requirement
|
233
|
+
none: false
|
234
|
+
requirements:
|
235
|
+
- - ! '>='
|
236
|
+
- !ruby/object:Gem::Version
|
237
|
+
version: '0'
|
168
238
|
- !ruby/object:Gem::Dependency
|
169
239
|
name: shelly-dependencies
|
170
|
-
requirement:
|
240
|
+
requirement: !ruby/object:Gem::Requirement
|
171
241
|
none: false
|
172
242
|
requirements:
|
173
243
|
- - ~>
|
@@ -175,7 +245,12 @@ dependencies:
|
|
175
245
|
version: 0.1.1
|
176
246
|
type: :runtime
|
177
247
|
prerelease: false
|
178
|
-
version_requirements:
|
248
|
+
version_requirements: !ruby/object:Gem::Requirement
|
249
|
+
none: false
|
250
|
+
requirements:
|
251
|
+
- - ~>
|
252
|
+
- !ruby/object:Gem::Version
|
253
|
+
version: 0.1.1
|
179
254
|
description: Tool for managing applications and clouds at shellycloud.com
|
180
255
|
email:
|
181
256
|
- support@shellycloud.com
|
@@ -249,12 +324,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
249
324
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
250
325
|
none: false
|
251
326
|
requirements:
|
252
|
-
- - ! '
|
327
|
+
- - ! '>'
|
253
328
|
- !ruby/object:Gem::Version
|
254
|
-
version:
|
329
|
+
version: 1.3.1
|
255
330
|
requirements: []
|
256
331
|
rubyforge_project: shelly
|
257
|
-
rubygems_version: 1.8.
|
332
|
+
rubygems_version: 1.8.24
|
258
333
|
signing_key:
|
259
334
|
specification_version: 3
|
260
335
|
summary: Shelly Cloud command line tool
|