shelly 0.3.4 → 0.3.5.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 +12 -8
- data/lib/shelly/cli/database.rb +17 -1
- data/lib/shelly/cli/deploy.rb +26 -21
- data/lib/shelly/client.rb +1 -0
- data/lib/shelly/client/apps.rb +0 -8
- data/lib/shelly/client/tunnels.rb +10 -0
- data/lib/shelly/version.rb +1 -1
- data/spec/shelly/app_spec.rb +12 -5
- data/spec/shelly/cli/database_spec.rb +32 -0
- data/spec/shelly/cli/deploy_spec.rb +9 -0
- data/spec/shelly/cli/file_spec.rb +5 -5
- data/spec/shelly/cli/main_spec.rb +2 -2
- data/spec/shelly/client_spec.rb +3 -3
- metadata +75 -25
data/lib/shelly/app.rb
CHANGED
@@ -269,7 +269,7 @@ module Shelly
|
|
269
269
|
end
|
270
270
|
|
271
271
|
def upload(source)
|
272
|
-
|
272
|
+
tunnel_connection.tap do |conn|
|
273
273
|
rsync(source, "#{conn['host']}:#{persistent_disk}", conn)
|
274
274
|
end
|
275
275
|
end
|
@@ -281,7 +281,7 @@ module Shelly
|
|
281
281
|
end
|
282
282
|
|
283
283
|
def download(relative_source, destination)
|
284
|
-
|
284
|
+
tunnel_connection.tap do |conn|
|
285
285
|
source = File.join("#{conn['host']}:#{persistent_disk}", relative_source)
|
286
286
|
rsync(source, destination, conn)
|
287
287
|
end
|
@@ -291,6 +291,10 @@ module Shelly
|
|
291
291
|
ssh(:command => "delete_file #{remote_path}")
|
292
292
|
end
|
293
293
|
|
294
|
+
def setup_tunnel(conn, local_port)
|
295
|
+
system "ssh #{ssh_options(conn)} -N -L #{local_port}:localhost:#{conn['service']['port']} #{conn['host']}"
|
296
|
+
end
|
297
|
+
|
294
298
|
# Public: Return databases for given Cloud in Cloudfile
|
295
299
|
# Returns Array of databases
|
296
300
|
def cloud_databases
|
@@ -351,6 +355,11 @@ module Shelly
|
|
351
355
|
IO.popen(%Q{git log --no-merges --oneline --pretty=format:"#{format}" #{range}}).read.strip
|
352
356
|
end
|
353
357
|
|
358
|
+
# Returns first at least configured virtual server
|
359
|
+
def tunnel_connection(service = "ssh", server = nil)
|
360
|
+
shelly.tunnel(code_name, service, server)
|
361
|
+
end
|
362
|
+
|
354
363
|
private
|
355
364
|
|
356
365
|
def assign_attributes(response)
|
@@ -373,18 +382,13 @@ module Shelly
|
|
373
382
|
content["servers"].any? {|_, settings| settings.has_key?(option)}
|
374
383
|
end
|
375
384
|
|
376
|
-
# Returns first at least configured virtual server
|
377
|
-
def console_connection(server = nil)
|
378
|
-
shelly.console(code_name, server)
|
379
|
-
end
|
380
|
-
|
381
385
|
# Returns first at least configured virtual server if databases are configured
|
382
386
|
def configured_db_server_connection(server = nil)
|
383
387
|
shelly.configured_db_server(code_name, server)
|
384
388
|
end
|
385
389
|
|
386
390
|
def ssh(options = {})
|
387
|
-
conn =
|
391
|
+
conn = tunnel_connection("ssh", options[:server])
|
388
392
|
system "ssh #{ssh_options(conn)} -t #{conn['host']} #{options[:command]}"
|
389
393
|
end
|
390
394
|
|
data/lib/shelly/cli/database.rb
CHANGED
@@ -6,7 +6,7 @@ module Shelly
|
|
6
6
|
class Database < Command
|
7
7
|
namespace :database
|
8
8
|
include Helpers
|
9
|
-
before_hook :logged_in?, :only => [:reset]
|
9
|
+
before_hook :logged_in?, :only => [:reset, :tunnel]
|
10
10
|
class_option :cloud, :type => :string, :aliases => "-c", :desc => "Specify cloud"
|
11
11
|
|
12
12
|
desc "reset KIND", "Reset database"
|
@@ -23,6 +23,22 @@ module Shelly
|
|
23
23
|
rescue Client::ConflictException
|
24
24
|
say_error "Cloud #{app} wasn't deployed properly. Cannot reset database."
|
25
25
|
end
|
26
|
+
|
27
|
+
desc "tunnel KIND", "Setup tunnel to given database"
|
28
|
+
method_option :port, :type => :string, :aliases => "-p",
|
29
|
+
:desc => "Local port on which tunnel will be set up"
|
30
|
+
def tunnel(kind)
|
31
|
+
app = multiple_clouds(options[:cloud], "database tunnel")
|
32
|
+
local_port = options[:port] || 9900
|
33
|
+
conn = app.tunnel_connection(kind)
|
34
|
+
say "Connection details", :green
|
35
|
+
say "host: localhost"
|
36
|
+
say "port: #{local_port}"
|
37
|
+
say "database: #{conn['service']['database_name']}"
|
38
|
+
say "username: #{conn['service']['username']}"
|
39
|
+
say "password: #{conn['service']['password']}"
|
40
|
+
app.setup_tunnel(conn, local_port)
|
41
|
+
end
|
26
42
|
end
|
27
43
|
end
|
28
44
|
end
|
data/lib/shelly/cli/deploy.rb
CHANGED
@@ -38,27 +38,32 @@ module Shelly
|
|
38
38
|
specify_log(log)
|
39
39
|
app = multiple_clouds(options[:cloud], "deploy show #{log}")
|
40
40
|
content = app.deploy_log(log)
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
41
|
+
unless content.empty?
|
42
|
+
say "Log for deploy done on #{content["created_at"]}", :green
|
43
|
+
if content["bundle_install"]
|
44
|
+
say("Starting bundle install", :green); say(content["bundle_install"])
|
45
|
+
end
|
46
|
+
if content["whenever"]
|
47
|
+
say("Starting whenever", :green); say(content["whenever"])
|
48
|
+
end
|
49
|
+
if content["callbacks"]
|
50
|
+
say("Starting callbacks", :green); say(content["callbacks"])
|
51
|
+
end
|
52
|
+
if content["delayed_job"]
|
53
|
+
say("Starting delayed job", :green); say(content["delayed_job"])
|
54
|
+
end
|
55
|
+
if content["sidekiq"]
|
56
|
+
say("Starting sidekiq", :green); say(content["sidekiq"])
|
57
|
+
end
|
58
|
+
if content["thin_restart"]
|
59
|
+
say("Starting thin", :green); say(content["thin_restart"])
|
60
|
+
end
|
61
|
+
if content["puma_restart"]
|
62
|
+
say("Starting puma", :green); say(content["puma_restart"])
|
63
|
+
end
|
64
|
+
else
|
65
|
+
say_error("There was an error and log is not available", :with_exit => false)
|
66
|
+
say_error("Please contact our support https://shellycloud.com/support")
|
62
67
|
end
|
63
68
|
rescue Client::NotFoundException => e
|
64
69
|
raise unless e.resource == :log
|
data/lib/shelly/client.rb
CHANGED
data/lib/shelly/client/apps.rb
CHANGED
@@ -33,12 +33,4 @@ class Shelly::Client
|
|
33
33
|
def command(cloud, body, type)
|
34
34
|
post("/apps/#{cloud}/command", {:body => body, :type => type})
|
35
35
|
end
|
36
|
-
|
37
|
-
def console(code_name, server = nil)
|
38
|
-
get("/apps/#{code_name}/console", {:server => server})
|
39
|
-
end
|
40
|
-
|
41
|
-
def configured_db_server(code_name, server = nil)
|
42
|
-
get("/apps/#{code_name}/configured_db_server", {:server => server})
|
43
|
-
end
|
44
36
|
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
class Shelly::Client
|
2
|
+
def tunnel(code_name, service, server = nil)
|
3
|
+
post("/apps/#{code_name}/tunnels", {:server => server, :service => service})
|
4
|
+
end
|
5
|
+
|
6
|
+
def configured_db_server(code_name, server = nil)
|
7
|
+
get("/apps/#{code_name}/configured_db_server",
|
8
|
+
{:server => server, :service => "ssh"})
|
9
|
+
end
|
10
|
+
end
|
data/lib/shelly/version.rb
CHANGED
data/spec/shelly/app_spec.rb
CHANGED
@@ -291,7 +291,7 @@ describe Shelly::App do
|
|
291
291
|
|
292
292
|
describe "#rake" do
|
293
293
|
it "should return result of rake task" do
|
294
|
-
@client.stub(:
|
294
|
+
@client.stub(:tunnel).and_return(
|
295
295
|
{"host" => "console.example.com", "port" => "40010", "user" => "foo"})
|
296
296
|
@app.should_receive(:system).with("ssh -o StrictHostKeyChecking=no -p 40010 -l foo -t console.example.com rake_runner \"test\"")
|
297
297
|
@app.rake("test")
|
@@ -349,7 +349,7 @@ describe Shelly::App do
|
|
349
349
|
|
350
350
|
describe "#console" do
|
351
351
|
it "should run ssh with all parameters" do
|
352
|
-
@client.stub(:
|
352
|
+
@client.stub(:tunnel).and_return(
|
353
353
|
{"host" => "console.example.com", "port" => "40010", "user" => "foo"})
|
354
354
|
@app.should_receive(:system).with("ssh -o StrictHostKeyChecking=no -p 40010 -l foo -t console.example.com ")
|
355
355
|
@app.console
|
@@ -357,7 +357,7 @@ describe Shelly::App do
|
|
357
357
|
|
358
358
|
context "when server passed" do
|
359
359
|
it "should request console on given server" do
|
360
|
-
@client.should_receive(:
|
360
|
+
@client.should_receive(:tunnel).with("foo-staging", "ssh", "app1").and_return({})
|
361
361
|
@app.stub(:system)
|
362
362
|
@app.console("app1")
|
363
363
|
end
|
@@ -373,7 +373,7 @@ describe Shelly::App do
|
|
373
373
|
|
374
374
|
describe "#upload" do
|
375
375
|
it "should run rsync with proper parameters" do
|
376
|
-
@client.stub(:
|
376
|
+
@client.stub(:tunnel).and_return(
|
377
377
|
{"host" => "console.example.com", "port" => "40010", "user" => "foo"})
|
378
378
|
@app.should_receive(:system).with("rsync -avz -e 'ssh -o StrictHostKeyChecking=no -p 40010 -l foo' --progress /path console.example.com:/home/foo-staging/disk")
|
379
379
|
@app.upload("/path")
|
@@ -382,7 +382,7 @@ describe Shelly::App do
|
|
382
382
|
|
383
383
|
describe "#download" do
|
384
384
|
it "should run rsync with proper parameters" do
|
385
|
-
@client.stub(:
|
385
|
+
@client.stub(:tunnel).and_return(
|
386
386
|
{"host" => "console.example.com", "port" => "40010", "user" => "foo"})
|
387
387
|
@app.should_receive(:system).with("rsync -avz -e 'ssh -o StrictHostKeyChecking=no -p 40010 -l foo' --progress console.example.com:/home/foo-staging/disk/. /tmp")
|
388
388
|
@app.download(".", "/tmp")
|
@@ -545,4 +545,11 @@ describe Shelly::App do
|
|
545
545
|
@app.pending_commits.should == "c10c5f6 Some changes"
|
546
546
|
end
|
547
547
|
end
|
548
|
+
|
549
|
+
describe "#setup_tunnel" do
|
550
|
+
it "should setup tunnel with given options" do
|
551
|
+
@app.should_receive(:system).with("ssh -o StrictHostKeyChecking=no -p 43000 -l foo -N -L 9999:localhost:5432 console.example.com")
|
552
|
+
@app.setup_tunnel({"service" => {"port" => "5432"}, "host" => "console.example.com", "port" => 43000, "user" => "foo"}, 9999)
|
553
|
+
end
|
554
|
+
end
|
548
555
|
end
|
@@ -30,4 +30,36 @@ describe Shelly::CLI::Database do
|
|
30
30
|
end
|
31
31
|
end
|
32
32
|
end
|
33
|
+
|
34
|
+
describe "#tunnel" do
|
35
|
+
it "should ensure user has logged in" do
|
36
|
+
hooks(@database, :tunnel).should include(:logged_in?)
|
37
|
+
end
|
38
|
+
|
39
|
+
it "should show tunnel's details" do
|
40
|
+
@app.stub(:setup_tunnel)
|
41
|
+
conn = {
|
42
|
+
'service' => {
|
43
|
+
'database_name' => 'foo',
|
44
|
+
'username' => 'foo',
|
45
|
+
'password' => 'secret'
|
46
|
+
}
|
47
|
+
}
|
48
|
+
@app.should_receive(:tunnel_connection).and_return(conn)
|
49
|
+
$stdout.should_receive(:puts).with("host: localhost")
|
50
|
+
$stdout.should_receive(:puts).with("port: 9900")
|
51
|
+
$stdout.should_receive(:puts).with("database: foo")
|
52
|
+
$stdout.should_receive(:puts).with("username: foo")
|
53
|
+
$stdout.should_receive(:puts).with("password: secret")
|
54
|
+
invoke(@database, :tunnel, "mongodb")
|
55
|
+
end
|
56
|
+
|
57
|
+
it "should setup tunnel" do
|
58
|
+
conn = {"host" => "localhost", "service" => {"port" => "27010"}}
|
59
|
+
@app.should_receive(:tunnel_connection).and_return(conn)
|
60
|
+
@app.should_receive(:setup_tunnel).with(conn, 10103)
|
61
|
+
@database.options = {:port => 10103}
|
62
|
+
invoke(@database, :tunnel, "mongodb")
|
63
|
+
end
|
64
|
+
end
|
33
65
|
end
|
@@ -86,6 +86,15 @@ describe Shelly::CLI::Deploy do
|
|
86
86
|
end
|
87
87
|
end
|
88
88
|
|
89
|
+
context "log is missing" do
|
90
|
+
it "should show error about contact support" do
|
91
|
+
@client.should_receive(:deploy_log).with("foo-staging", "last").and_return({})
|
92
|
+
$stdout.should_receive(:puts).with(red "There was an error and log is not available")
|
93
|
+
$stdout.should_receive(:puts).with(red "Please contact our support https://shellycloud.com/support")
|
94
|
+
lambda { invoke(@deploys, :show, "last") }.should raise_error(SystemExit)
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
89
98
|
def expected_output
|
90
99
|
$stdout.should_receive(:puts).with(green "Log for deploy done on 2011-12-12 at 14:14:59")
|
91
100
|
$stdout.should_receive(:puts).with(green "Starting bundle install")
|
@@ -28,7 +28,7 @@ describe Shelly::CLI::File do
|
|
28
28
|
|
29
29
|
context "cloud is not running" do
|
30
30
|
it "should display error" do
|
31
|
-
@client.stub(:
|
31
|
+
@client.stub(:tunnel).and_raise(Shelly::Client::ConflictException)
|
32
32
|
$stdout.should_receive(:puts).with(red "Cloud foo-production wasn't deployed properly. Cannot list files.")
|
33
33
|
lambda {
|
34
34
|
invoke(@cli_files, :list, "some/path")
|
@@ -45,7 +45,7 @@ describe Shelly::CLI::File do
|
|
45
45
|
|
46
46
|
it "should upload files" do
|
47
47
|
expected = {"host" => "console.example.com", "port" => "40010", "user" => "foo"}
|
48
|
-
@client.stub(:
|
48
|
+
@client.stub(:tunnel).and_return(expected)
|
49
49
|
@app.should_receive(:upload).with("some/path")
|
50
50
|
invoke(@cli_files, :upload, "some/path")
|
51
51
|
end
|
@@ -59,7 +59,7 @@ describe Shelly::CLI::File do
|
|
59
59
|
|
60
60
|
context "cloud is not running" do
|
61
61
|
it "should display error" do
|
62
|
-
@client.stub(:
|
62
|
+
@client.stub(:tunnel).and_raise(Shelly::Client::ConflictException)
|
63
63
|
$stdout.should_receive(:puts).with(red "Cloud foo-production wasn't deployed properly. Cannot upload files.")
|
64
64
|
lambda {
|
65
65
|
invoke(@cli_files, :upload, "some/path")
|
@@ -81,14 +81,14 @@ describe Shelly::CLI::File do
|
|
81
81
|
|
82
82
|
it "should download files" do
|
83
83
|
expected = {"host" => "console.example.com", "port" => "40010", "user" => "foo"}
|
84
|
-
@client.stub(:
|
84
|
+
@client.stub(:tunnel).and_return(expected)
|
85
85
|
@app.should_receive(:download).with("some/path", "/destination")
|
86
86
|
invoke(@cli_files, :download, "some/path", "/destination")
|
87
87
|
end
|
88
88
|
|
89
89
|
context "cloud is not running" do
|
90
90
|
it "should display error" do
|
91
|
-
@client.stub(:
|
91
|
+
@client.stub(:tunnel).and_raise(Shelly::Client::ConflictException)
|
92
92
|
$stdout.should_receive(:puts).with(red "Cloud foo-production wasn't deployed properly. Cannot download files.")
|
93
93
|
lambda {
|
94
94
|
invoke(@cli_files, :download, "some/path")
|
@@ -1379,7 +1379,7 @@ Wait until cloud is in 'turned off' state and try again.")
|
|
1379
1379
|
|
1380
1380
|
context "virtual servers are not running" do
|
1381
1381
|
it "should display error" do
|
1382
|
-
@client.stub(:
|
1382
|
+
@client.stub(:tunnel).and_raise(Shelly::Client::ConflictException)
|
1383
1383
|
$stdout.should_receive(:puts).with(red "Cloud foo-production is not running. Cannot run console.")
|
1384
1384
|
lambda {
|
1385
1385
|
invoke(@main, :console)
|
@@ -1390,7 +1390,7 @@ Wait until cloud is in 'turned off' state and try again.")
|
|
1390
1390
|
context "virtual server not found" do
|
1391
1391
|
it "should display error" do
|
1392
1392
|
ex = Shelly::Client::NotFoundException.new("resource" => "virtual_server")
|
1393
|
-
@client.stub(:
|
1393
|
+
@client.stub(:tunnel).and_raise(ex)
|
1394
1394
|
@main.options = {:server => "foobar"}
|
1395
1395
|
$stdout.should_receive(:puts).with(red "Virtual Server 'foobar' not found")
|
1396
1396
|
lambda {
|
data/spec/shelly/client_spec.rb
CHANGED
@@ -250,12 +250,12 @@ describe Shelly::Client do
|
|
250
250
|
end
|
251
251
|
end
|
252
252
|
|
253
|
-
describe "#
|
253
|
+
describe "#tunnel" do
|
254
254
|
it "should fetch virtual server data from API" do
|
255
255
|
body = {:port => "40010", :host => "console.example.com", :user => "foo-production"}
|
256
|
-
FakeWeb.register_uri(:
|
256
|
+
FakeWeb.register_uri(:post, api_url("apps/staging-foo/tunnels"),
|
257
257
|
:body => body.to_json)
|
258
|
-
response = @client.
|
258
|
+
response = @client.tunnel("staging-foo", "ssh")
|
259
259
|
response.should == {"port" => "40010", "host" => "console.example.com", "user"=>"foo-production"}
|
260
260
|
end
|
261
261
|
end
|
metadata
CHANGED
@@ -1,25 +1,25 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: shelly
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
|
4
|
+
prerelease: 6
|
5
|
+
version: 0.3.5.pre
|
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: 2013-07-
|
12
|
+
date: 2013-07-16 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rspec
|
16
|
+
type: :development
|
16
17
|
requirement: !ruby/object:Gem::Requirement
|
17
18
|
none: false
|
18
19
|
requirements:
|
19
20
|
- - ~>
|
20
21
|
- !ruby/object:Gem::Version
|
21
22
|
version: 2.11.0
|
22
|
-
type: :development
|
23
23
|
prerelease: false
|
24
24
|
version_requirements: !ruby/object:Gem::Requirement
|
25
25
|
none: false
|
@@ -29,13 +29,13 @@ dependencies:
|
|
29
29
|
version: 2.11.0
|
30
30
|
- !ruby/object:Gem::Dependency
|
31
31
|
name: rake
|
32
|
+
type: :development
|
32
33
|
requirement: !ruby/object:Gem::Requirement
|
33
34
|
none: false
|
34
35
|
requirements:
|
35
36
|
- - ! '>='
|
36
37
|
- !ruby/object:Gem::Version
|
37
38
|
version: '0'
|
38
|
-
type: :development
|
39
39
|
prerelease: false
|
40
40
|
version_requirements: !ruby/object:Gem::Requirement
|
41
41
|
none: false
|
@@ -45,13 +45,13 @@ dependencies:
|
|
45
45
|
version: '0'
|
46
46
|
- !ruby/object:Gem::Dependency
|
47
47
|
name: guard
|
48
|
+
type: :development
|
48
49
|
requirement: !ruby/object:Gem::Requirement
|
49
50
|
none: false
|
50
51
|
requirements:
|
51
52
|
- - ! '>='
|
52
53
|
- !ruby/object:Gem::Version
|
53
54
|
version: '0'
|
54
|
-
type: :development
|
55
55
|
prerelease: false
|
56
56
|
version_requirements: !ruby/object:Gem::Requirement
|
57
57
|
none: false
|
@@ -61,13 +61,13 @@ dependencies:
|
|
61
61
|
version: '0'
|
62
62
|
- !ruby/object:Gem::Dependency
|
63
63
|
name: guard-rspec
|
64
|
+
type: :development
|
64
65
|
requirement: !ruby/object:Gem::Requirement
|
65
66
|
none: false
|
66
67
|
requirements:
|
67
68
|
- - ! '>='
|
68
69
|
- !ruby/object:Gem::Version
|
69
70
|
version: '0'
|
70
|
-
type: :development
|
71
71
|
prerelease: false
|
72
72
|
version_requirements: !ruby/object:Gem::Requirement
|
73
73
|
none: false
|
@@ -77,13 +77,45 @@ dependencies:
|
|
77
77
|
version: '0'
|
78
78
|
- !ruby/object:Gem::Dependency
|
79
79
|
name: simplecov
|
80
|
+
type: :development
|
81
|
+
requirement: !ruby/object:Gem::Requirement
|
82
|
+
none: false
|
83
|
+
requirements:
|
84
|
+
- - ! '>='
|
85
|
+
- !ruby/object:Gem::Version
|
86
|
+
version: '0'
|
87
|
+
prerelease: false
|
88
|
+
version_requirements: !ruby/object:Gem::Requirement
|
89
|
+
none: false
|
90
|
+
requirements:
|
91
|
+
- - ! '>='
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: '0'
|
94
|
+
- !ruby/object:Gem::Dependency
|
95
|
+
name: ruby_gntp
|
96
|
+
type: :development
|
80
97
|
requirement: !ruby/object:Gem::Requirement
|
81
98
|
none: false
|
82
99
|
requirements:
|
83
100
|
- - ! '>='
|
84
101
|
- !ruby/object:Gem::Version
|
85
102
|
version: '0'
|
103
|
+
prerelease: false
|
104
|
+
version_requirements: !ruby/object:Gem::Requirement
|
105
|
+
none: false
|
106
|
+
requirements:
|
107
|
+
- - ! '>='
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0'
|
110
|
+
- !ruby/object:Gem::Dependency
|
111
|
+
name: rb-fsevent
|
86
112
|
type: :development
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
none: false
|
115
|
+
requirements:
|
116
|
+
- - ! '>='
|
117
|
+
- !ruby/object:Gem::Version
|
118
|
+
version: '0'
|
87
119
|
prerelease: false
|
88
120
|
version_requirements: !ruby/object:Gem::Requirement
|
89
121
|
none: false
|
@@ -93,13 +125,13 @@ dependencies:
|
|
93
125
|
version: '0'
|
94
126
|
- !ruby/object:Gem::Dependency
|
95
127
|
name: fakefs
|
128
|
+
type: :development
|
96
129
|
requirement: !ruby/object:Gem::Requirement
|
97
130
|
none: false
|
98
131
|
requirements:
|
99
132
|
- - ! '>='
|
100
133
|
- !ruby/object:Gem::Version
|
101
134
|
version: '0'
|
102
|
-
type: :development
|
103
135
|
prerelease: false
|
104
136
|
version_requirements: !ruby/object:Gem::Requirement
|
105
137
|
none: false
|
@@ -109,13 +141,13 @@ dependencies:
|
|
109
141
|
version: '0'
|
110
142
|
- !ruby/object:Gem::Dependency
|
111
143
|
name: fakeweb
|
144
|
+
type: :development
|
112
145
|
requirement: !ruby/object:Gem::Requirement
|
113
146
|
none: false
|
114
147
|
requirements:
|
115
148
|
- - ! '>='
|
116
149
|
- !ruby/object:Gem::Version
|
117
150
|
version: '0'
|
118
|
-
type: :development
|
119
151
|
prerelease: false
|
120
152
|
version_requirements: !ruby/object:Gem::Requirement
|
121
153
|
none: false
|
@@ -125,13 +157,13 @@ dependencies:
|
|
125
157
|
version: '0'
|
126
158
|
- !ruby/object:Gem::Dependency
|
127
159
|
name: wijet-thor
|
160
|
+
type: :runtime
|
128
161
|
requirement: !ruby/object:Gem::Requirement
|
129
162
|
none: false
|
130
163
|
requirements:
|
131
164
|
- - ~>
|
132
165
|
- !ruby/object:Gem::Version
|
133
166
|
version: 0.14.9
|
134
|
-
type: :runtime
|
135
167
|
prerelease: false
|
136
168
|
version_requirements: !ruby/object:Gem::Requirement
|
137
169
|
none: false
|
@@ -141,13 +173,13 @@ dependencies:
|
|
141
173
|
version: 0.14.9
|
142
174
|
- !ruby/object:Gem::Dependency
|
143
175
|
name: rest-client
|
176
|
+
type: :runtime
|
144
177
|
requirement: !ruby/object:Gem::Requirement
|
145
178
|
none: false
|
146
179
|
requirements:
|
147
180
|
- - ! '>='
|
148
181
|
- !ruby/object:Gem::Version
|
149
182
|
version: '0'
|
150
|
-
type: :runtime
|
151
183
|
prerelease: false
|
152
184
|
version_requirements: !ruby/object:Gem::Requirement
|
153
185
|
none: false
|
@@ -157,13 +189,13 @@ dependencies:
|
|
157
189
|
version: '0'
|
158
190
|
- !ruby/object:Gem::Dependency
|
159
191
|
name: json
|
192
|
+
type: :runtime
|
160
193
|
requirement: !ruby/object:Gem::Requirement
|
161
194
|
none: false
|
162
195
|
requirements:
|
163
196
|
- - ! '>='
|
164
197
|
- !ruby/object:Gem::Version
|
165
198
|
version: '0'
|
166
|
-
type: :runtime
|
167
199
|
prerelease: false
|
168
200
|
version_requirements: !ruby/object:Gem::Requirement
|
169
201
|
none: false
|
@@ -173,13 +205,13 @@ dependencies:
|
|
173
205
|
version: '0'
|
174
206
|
- !ruby/object:Gem::Dependency
|
175
207
|
name: progressbar
|
208
|
+
type: :runtime
|
176
209
|
requirement: !ruby/object:Gem::Requirement
|
177
210
|
none: false
|
178
211
|
requirements:
|
179
212
|
- - ! '>='
|
180
213
|
- !ruby/object:Gem::Version
|
181
214
|
version: '0'
|
182
|
-
type: :runtime
|
183
215
|
prerelease: false
|
184
216
|
version_requirements: !ruby/object:Gem::Requirement
|
185
217
|
none: false
|
@@ -189,13 +221,13 @@ dependencies:
|
|
189
221
|
version: '0'
|
190
222
|
- !ruby/object:Gem::Dependency
|
191
223
|
name: launchy
|
224
|
+
type: :runtime
|
192
225
|
requirement: !ruby/object:Gem::Requirement
|
193
226
|
none: false
|
194
227
|
requirements:
|
195
228
|
- - ! '>='
|
196
229
|
- !ruby/object:Gem::Version
|
197
230
|
version: '0'
|
198
|
-
type: :runtime
|
199
231
|
prerelease: false
|
200
232
|
version_requirements: !ruby/object:Gem::Requirement
|
201
233
|
none: false
|
@@ -205,13 +237,13 @@ dependencies:
|
|
205
237
|
version: '0'
|
206
238
|
- !ruby/object:Gem::Dependency
|
207
239
|
name: netrc
|
240
|
+
type: :runtime
|
208
241
|
requirement: !ruby/object:Gem::Requirement
|
209
242
|
none: false
|
210
243
|
requirements:
|
211
244
|
- - ! '>='
|
212
245
|
- !ruby/object:Gem::Version
|
213
246
|
version: '0'
|
214
|
-
type: :runtime
|
215
247
|
prerelease: false
|
216
248
|
version_requirements: !ruby/object:Gem::Requirement
|
217
249
|
none: false
|
@@ -264,6 +296,7 @@ files:
|
|
264
296
|
- lib/shelly/client/organizations.rb
|
265
297
|
- lib/shelly/client/shellyapp.rb
|
266
298
|
- lib/shelly/client/ssh_keys.rb
|
299
|
+
- lib/shelly/client/tunnels.rb
|
267
300
|
- lib/shelly/client/users.rb
|
268
301
|
- lib/shelly/cloudfile.rb
|
269
302
|
- lib/shelly/download_progress_bar.rb
|
@@ -315,22 +348,39 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
315
348
|
- - ! '>='
|
316
349
|
- !ruby/object:Gem::Version
|
317
350
|
version: '0'
|
318
|
-
segments:
|
319
|
-
- 0
|
320
|
-
hash: 3404836754866729086
|
321
351
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
322
352
|
none: false
|
323
353
|
requirements:
|
324
|
-
- - ! '
|
354
|
+
- - ! '>'
|
325
355
|
- !ruby/object:Gem::Version
|
326
|
-
version:
|
327
|
-
segments:
|
328
|
-
- 0
|
329
|
-
hash: 3404836754866729086
|
356
|
+
version: 1.3.1
|
330
357
|
requirements: []
|
331
358
|
rubyforge_project: shelly
|
332
|
-
rubygems_version: 1.8.
|
359
|
+
rubygems_version: 1.8.23
|
333
360
|
signing_key:
|
334
361
|
specification_version: 3
|
335
362
|
summary: Shelly Cloud command line tool
|
336
|
-
test_files:
|
363
|
+
test_files:
|
364
|
+
- spec/helpers.rb
|
365
|
+
- spec/input_faker.rb
|
366
|
+
- spec/shelly/app_spec.rb
|
367
|
+
- spec/shelly/backup_spec.rb
|
368
|
+
- spec/shelly/cli/backup_spec.rb
|
369
|
+
- spec/shelly/cli/config_spec.rb
|
370
|
+
- spec/shelly/cli/database_spec.rb
|
371
|
+
- spec/shelly/cli/deploy_spec.rb
|
372
|
+
- spec/shelly/cli/file_spec.rb
|
373
|
+
- spec/shelly/cli/logs_spec.rb
|
374
|
+
- spec/shelly/cli/main_spec.rb
|
375
|
+
- spec/shelly/cli/organization_spec.rb
|
376
|
+
- spec/shelly/cli/runner_spec.rb
|
377
|
+
- spec/shelly/cli/user_spec.rb
|
378
|
+
- spec/shelly/client_spec.rb
|
379
|
+
- spec/shelly/cloudfile_spec.rb
|
380
|
+
- spec/shelly/download_progress_bar_spec.rb
|
381
|
+
- spec/shelly/model_spec.rb
|
382
|
+
- spec/shelly/organization_spec.rb
|
383
|
+
- spec/shelly/structure_validator_spec.rb
|
384
|
+
- spec/shelly/user_spec.rb
|
385
|
+
- spec/spec_helper.rb
|
386
|
+
- spec/thor/options_spec.rb
|