shelly 0.4.6 → 0.4.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,15 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 9806b19fb3c19741be321f7b85b0b5907d6b397c
4
- data.tar.gz: 60dc5f079fc9aa5d658232e1b5af5eb8a2cba919
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ YzFmYmZhM2Q2ZjBhZWVkNDY3ZmJkNzNlZTllYjVkNTVhNzU4ZWQ2Yg==
5
+ data.tar.gz: !binary |-
6
+ ZjNlZjI3YTI2OTEyNGNhNzVhYWFjM2ZmNzc5YjY4MTVmMjI0MTg3NA==
5
7
  SHA512:
6
- metadata.gz: 44b83e991d63f0b091d12c392c605170c80bb370f166e827c9d2605a35ba004ddc8dc94ff85862d021410608e51d6cbe5719ed5c66679835c4f7f5b7518db1c8
7
- data.tar.gz: c7192c598ec6e85faafb4a7981c4d4c685f742f24738793ab7b528ed63730522af4fe150295ba16f5da13f1fdc1b6408b5c4fd942965a1368631c82b574f2bd1
8
+ metadata.gz: !binary |-
9
+ ZTJlNThiMDRhNDg2YzQ0Y2QxNDY2NjdjNmFlZTQ5MGI3Yjg2MGZjYzE5NTUz
10
+ NTBmYjQyZTc2Yzg0YzIxMDMzZjU5NjY4ODE3MGRiNjE3NWU2ODhjZWVlNTg4
11
+ YmZiODRjZWExOWYwYmMwNDlkNzMwOWVmMDQyZTI2OThiY2IzMjQ=
12
+ data.tar.gz: !binary |-
13
+ YjNkYmI1ODQwNTVmN2I3ZjlmNDVhZTYzNWQyNTBiZWFmYWUxZjI1NTg4YWJk
14
+ ZDQ5MjUxOTA2MTdkM2Q4MmI3ZGIwNGFmZmI4NTlmZjlmOTI4NTA4Mjc2NzJl
15
+ YTU4MDlkNjUyN2JkMTUyOWE0MjcwZTNjZjZmMTQ2MmUzNWJhNmQ=
@@ -1,3 +1,7 @@
1
+ ## 0.4.7 / 2013-10-18
2
+
3
+ * [feature] Mange SSL certificate with `shelly cert`
4
+
1
5
  ## 0.4.6 / 2013-10-01
2
6
 
3
7
  * [bugfix] `shelly delete` removes proper git remote.
@@ -200,6 +200,18 @@ module Shelly
200
200
  configs.any? { |config| config["path"] == path }
201
201
  end
202
202
 
203
+ def cert
204
+ shelly.cert(code_name)
205
+ end
206
+
207
+ def create_cert(content, key)
208
+ shelly.create_cert(code_name, content, key)
209
+ end
210
+
211
+ def update_cert(content, key)
212
+ shelly.update_cert(code_name, content, key)
213
+ end
214
+
203
215
  def rake(task)
204
216
  ssh(:command => "rake_runner \"#{task}\"")
205
217
  end
@@ -0,0 +1,99 @@
1
+ require "shelly/cli/command"
2
+
3
+ module Shelly
4
+ module CLI
5
+ class Cert < Command
6
+ namespace :cert
7
+ include Helpers
8
+
9
+ before_hook :logged_in?, :only => [:show, :create, :update]
10
+
11
+ class_option :cloud, :type => :string, :aliases => "-c", :desc => "Specify cloud"
12
+
13
+ desc "show", "Show current certificate information"
14
+ def show
15
+ app = multiple_clouds(options[:cloud], "backup list")
16
+
17
+ cert = app.cert
18
+ say "Issuer: #{cert['info']['issuer']}"
19
+ say "Subject: #{cert['info']['subject']}"
20
+ say "Not valid before: #{Time.parse(cert['info']['since']).
21
+ getlocal.strftime("%Y-%m-%d %H:%M:%S")}"
22
+ say "Expires: #{Time.parse(cert['info']['to']).
23
+ getlocal.strftime("%Y-%m-%d %H:%M:%S")}"
24
+ rescue Client::NotFoundException => e
25
+ raise unless e.resource == :certificate
26
+ say_error "Certificate not found"
27
+ end
28
+
29
+ desc "create CERT_PATH [BUNDLE_PATH] KEY_PATH", "Add certificate to your cloud"
30
+ long_desc %{
31
+ Add certificate to your cloud.\n
32
+ CERT_PATH - path to certificate.\n
33
+ BUNDLE_PATH - optional path to certificate bundle path.\n
34
+ KEY_PATH - path to private key.
35
+ }
36
+ def create(cert_path, bundle_path = nil, key_path)
37
+ app = multiple_clouds(options[:cloud], "cert create CERT_PATH [BUNDLE_PATH] KEY_PATH")
38
+
39
+ content = ::File.read(cert_path).strip
40
+ bundle = bundle_path ? ::File.read(bundle_path).strip : ""
41
+ key = ::File.read(key_path).strip
42
+
43
+ content = content + "\n" + bundle
44
+ cert = app.create_cert(content, key)
45
+
46
+ say "Certificate was added to your cloud", :green
47
+ if cert['ip_address']
48
+ say "Deploying certificate on front end."
49
+ say "Point your domain to private IP address: #{cert['ip_address']}"
50
+ else
51
+ say "SSL requires certificate and private IP address."
52
+ say "Private IP address was requested for your cloud."
53
+ say "Support has been notified and will contact you shortly."
54
+ end
55
+ rescue Client::ValidationException => e
56
+ e.each_error { |error| say_error error, :with_exit => false }
57
+ exit 1
58
+ rescue Client::ConflictException => e
59
+ say_error e[:message]
60
+ end
61
+
62
+ desc "update CERT_PATH [BUNDLE_PATH] key", "Update current certificate"
63
+ long_desc %{
64
+ Update current certificate.\n
65
+ CERT_PATH - path to certificate.\n
66
+ BUNDLE_PATH - optional path to certificate bundle path.\n
67
+ KEY_PATH - path to private key.
68
+ }
69
+ def update(cert_path, bundle_path = nil, key_path)
70
+ app = multiple_clouds(options[:cloud], "cert update CERT_PATH [BUNDLE_PATH] KEY_PATH")
71
+
72
+ content = ::File.read(cert_path).strip
73
+ bundle = bundle_path ? ::File.read(bundle_path).strip : ""
74
+ key = ::File.read(key_path).strip
75
+
76
+ content = content + "\n" + bundle
77
+ cert = app.update_cert(content, key)
78
+
79
+ say "Certificate was updated", :green
80
+ if cert['ip_address']
81
+ say "Deploying certificate on front end."
82
+ say "Point your domain to private IP address: #{cert['ip_address']}"
83
+ else
84
+ say "SSL requires certificate and private IP address."
85
+ say "Private IP address was requested for your cloud."
86
+ say "Support has been notified and will contact you shortly."
87
+ end
88
+ rescue Client::ValidationException => e
89
+ e.each_error { |error| say_error error, :with_exit => false }
90
+ exit 1
91
+ rescue Client::NotFoundException => e
92
+ raise unless e.resource == :certificate
93
+ say_error "Certificate not found"
94
+ rescue Client::ConflictException => e
95
+ say_error e[:message]
96
+ end
97
+ end
98
+ end
99
+ end
@@ -7,6 +7,7 @@ require "shelly/cli/config"
7
7
  require "shelly/cli/file"
8
8
  require "shelly/cli/organization"
9
9
  require "shelly/cli/logs"
10
+ require "shelly/cli/cert"
10
11
 
11
12
  require "shelly/cli/main/add"
12
13
  require "shelly/cli/main/check"
@@ -21,7 +22,8 @@ module Shelly
21
22
  register_subcommand(Config, "config", "config <command>", "Manage application configuration files")
22
23
  register_subcommand(File, "file", "file <command>", "Upload and download files to and from persistent storage")
23
24
  register_subcommand(Organization, "organization", "organization <command>", "View organizations")
24
- register_subcommand(Logs, "logs", "logs <command>", "View application logs")
25
+ register_subcommand(Logs, "log", "logs <command>", "View application logs")
26
+ register_subcommand(Cert, "cert", "cert <command>", "Mange application certificates")
25
27
 
26
28
  check_unknown_options!(:except => :rake)
27
29
 
@@ -18,6 +18,7 @@ module Shelly
18
18
  require 'shelly/client/ssh_keys'
19
19
  require 'shelly/client/organizations'
20
20
  require 'shelly/client/auth'
21
+ require 'shelly/client/cert'
21
22
 
22
23
  def api_url
23
24
  ENV["SHELLY_URL"] || "https://api.shellycloud.com/apiv2"
@@ -0,0 +1,13 @@
1
+ class Shelly::Client
2
+ def cert(cloud)
3
+ get("/apps/#{cloud}/cert")
4
+ end
5
+
6
+ def create_cert(cloud, content, key)
7
+ post("/apps/#{cloud}/cert", :cert => {:content => content, :key => key})
8
+ end
9
+
10
+ def update_cert(cloud, content, key)
11
+ put("/apps/#{cloud}/cert", :cert => {:content => content, :key => key})
12
+ end
13
+ end
@@ -1,3 +1,3 @@
1
1
  module Shelly
2
- VERSION = "0.4.6"
2
+ VERSION = "0.4.7"
3
3
  end
@@ -472,6 +472,23 @@ describe Shelly::App do
472
472
  end
473
473
  end
474
474
 
475
+ context "certificate" do
476
+ it "#show_cert should query api" do
477
+ @client.should_receive(:cert).with(@app.code_name)
478
+ @app.cert
479
+ end
480
+
481
+ it "#create_cert should query api" do
482
+ @client.should_receive(:create_cert).with(@app.code_name, 'crt', 'key')
483
+ @app.create_cert("crt", "key")
484
+ end
485
+
486
+ it "#update_cert should query api" do
487
+ @client.should_receive(:update_cert).with(@app.code_name, 'crt', 'key')
488
+ @app.update_cert("crt", "key")
489
+ end
490
+ end
491
+
475
492
  describe "#create_cloudfile" do
476
493
  before do
477
494
  @app.environment = "production"
@@ -0,0 +1,161 @@
1
+ require "spec_helper"
2
+ require "shelly/cli/cert"
3
+
4
+ describe Shelly::CLI::Cert do
5
+ before do
6
+ FileUtils.stub(:chmod)
7
+ @cli = Shelly::CLI::Cert.new
8
+ Shelly::CLI::Cert.stub(:new).and_return(@cli)
9
+ @client = mock
10
+ Shelly::Client.stub(:new).and_return(@client)
11
+ @client.stub(:authorize!)
12
+ FileUtils.mkdir_p("/projects/foo")
13
+ Dir.chdir("/projects/foo")
14
+ @app = Shelly::App.new("foo-production")
15
+ Shelly::App.stub(:new).and_return(@app)
16
+ File.open("Cloudfile", 'w') { |f| f.write("foo-production:\n") }
17
+ end
18
+
19
+ describe "#show" do
20
+ it "should description" do
21
+ @app.should_receive(:cert).and_return(cert_response)
22
+ $stdout.should_receive(:puts).with("Issuer: Some issuer")
23
+ $stdout.should_receive(:puts).with("Subject: Some subject")
24
+ $stdout.should_receive(:puts).with("Not valid before:"\
25
+ " #{Time.parse(cert_response['info']['since']).getlocal.strftime("%Y-%m-%d %H:%M:%S")}")
26
+ $stdout.should_receive(:puts).with("Expires:"\
27
+ " #{Time.parse(cert_response['info']['to']).getlocal.strftime("%Y-%m-%d %H:%M:%S")}")
28
+ invoke(@cli, :show)
29
+ end
30
+
31
+ context "certificate not found" do
32
+ it "should exit" do
33
+ exception = Shelly::Client::NotFoundException.new("resource" => "certificate")
34
+ @app.should_receive(:cert).and_raise(exception)
35
+ $stdout.should_receive(:puts).with(red "Certificate not found")
36
+ lambda {
37
+ invoke(@cli, :show)
38
+ }.should raise_error(SystemExit)
39
+ end
40
+ end
41
+ end
42
+
43
+ describe "#create" do
44
+ before do
45
+ File.stub(:read).with('crt_path').and_return('crt')
46
+ File.stub(:read).with('key_path').and_return('key')
47
+ File.stub(:read).with('bundle_path').and_return('bundle')
48
+ end
49
+
50
+ it "should create certificate" do
51
+ @app.should_receive(:create_cert).with("crt\nbundle", "key").
52
+ and_return(cert_response)
53
+ $stdout.should_receive(:puts).with(green "Certificate was added to your cloud")
54
+ $stdout.should_receive(:puts).with("Deploying certificate on front end.")
55
+ $stdout.should_receive(:puts).with("Point your domain to private IP address: 10.0.0.1")
56
+
57
+ invoke(@cli, :create, "crt_path", "bundle_path", "key_path")
58
+ end
59
+
60
+ it "should create certificate without bundle" do
61
+ @app.should_receive(:create_cert).with("crt\n", "key").
62
+ and_return(cert_response('ip_address' => nil))
63
+
64
+ $stdout.should_receive(:puts).with(green "Certificate was added to your cloud")
65
+ $stdout.should_receive(:puts).with("SSL requires certificate and private IP address.")
66
+ $stdout.should_receive(:puts).with("Private IP address was requested for your cloud.")
67
+ $stdout.should_receive(:puts).with("Support has been notified and will contact you shortly.")
68
+
69
+ invoke(@cli, :create, "crt_path", "key_path")
70
+ end
71
+
72
+ context "validation errors" do
73
+ it "should show errors and exit" do
74
+ exception = Shelly::Client::ValidationException.new({"errors" => [["key", "is invalid"]]})
75
+ @app.should_receive(:create_cert).and_raise(exception)
76
+ $stdout.should_receive(:puts).with(red "Key is invalid")
77
+
78
+ lambda {
79
+ invoke(@cli, :create, "crt_path", "bundle_path", "key_path")
80
+ }.should raise_error(SystemExit)
81
+ end
82
+ end
83
+
84
+ context "deployment conflict" do
85
+ it "should show errors and exit" do
86
+ exception = Shelly::Client::ConflictException.new({"message" => "Deployment is in progress"})
87
+ @app.should_receive(:create_cert).and_raise(exception)
88
+ $stdout.should_receive(:puts).with(red "Deployment is in progress")
89
+
90
+ lambda {
91
+ invoke(@cli, :create, "crt_path", "bundle_path", "key_path")
92
+ }.should raise_error(SystemExit)
93
+ end
94
+ end
95
+ end
96
+
97
+ describe "#update" do
98
+ before do
99
+ File.stub(:read).with('crt_path').and_return('crt')
100
+ File.stub(:read).with('key_path').and_return('key')
101
+ File.stub(:read).with('bundle_path').and_return('bundle')
102
+ end
103
+
104
+ it "should create certificate" do
105
+ @app.should_receive(:update_cert).with("crt\nbundle", "key").
106
+ and_return(cert_response)
107
+ $stdout.should_receive(:puts).with(green "Certificate was updated")
108
+ $stdout.should_receive(:puts).with("Deploying certificate on front end.")
109
+ $stdout.should_receive(:puts).with("Point your domain to private IP address: 10.0.0.1")
110
+
111
+ invoke(@cli, :update, "crt_path", "bundle_path", "key_path")
112
+ end
113
+
114
+ it "should create certificate without bundle" do
115
+ @app.should_receive(:update_cert).with("crt\n", "key").
116
+ and_return(cert_response('ip_address' => nil))
117
+
118
+ $stdout.should_receive(:puts).with(green "Certificate was updated")
119
+ $stdout.should_receive(:puts).with("SSL requires certificate and private IP address.")
120
+ $stdout.should_receive(:puts).with("Private IP address was requested for your cloud.")
121
+ $stdout.should_receive(:puts).with("Support has been notified and will contact you shortly.")
122
+
123
+ invoke(@cli, :update, "crt_path", "key_path")
124
+ end
125
+
126
+ context "validation errors" do
127
+ it "should show errors and exit" do
128
+ exception = Shelly::Client::ValidationException.new({"errors" => [["key", "is invalid"]]})
129
+ @app.should_receive(:update_cert).and_raise(exception)
130
+ $stdout.should_receive(:puts).with(red "Key is invalid")
131
+
132
+ lambda {
133
+ invoke(@cli, :update, "crt_path", "bundle_path", "key_path")
134
+ }.should raise_error(SystemExit)
135
+ end
136
+ end
137
+
138
+ context "deployment conflict" do
139
+ it "should show errors and exit" do
140
+ exception = Shelly::Client::ConflictException.new({"message" => "Deployment is in progress"})
141
+ @app.should_receive(:update_cert).and_raise(exception)
142
+ $stdout.should_receive(:puts).with(red "Deployment is in progress")
143
+
144
+ lambda {
145
+ invoke(@cli, :update, "crt_path", "bundle_path", "key_path")
146
+ }.should raise_error(SystemExit)
147
+ end
148
+ end
149
+ end
150
+
151
+ def cert_response(options = {})
152
+ {
153
+ 'info' => {
154
+ 'issuer' => 'Some issuer',
155
+ 'subject' => 'Some subject',
156
+ 'since' => '2012-06-11 23:00:00 UTC',
157
+ 'to' => '2013-06-11 11:00:00 UTC'},
158
+ 'ip_address' => '10.0.0.1'
159
+ }.merge(options)
160
+ end
161
+ end
@@ -393,6 +393,25 @@ describe Shelly::Client do
393
393
  end
394
394
  end
395
395
 
396
+ context "certificate" do
397
+ it "#cert should perform a get request" do
398
+ @client.should_receive(:get).with("/apps/staging-foo/cert")
399
+ @client.cert("staging-foo")
400
+ end
401
+
402
+ it "#create_cert should perform a post request" do
403
+ @client.should_receive(:post).with("/apps/staging-foo/cert",
404
+ :cert => {:content => 'crt', :key => 'key'})
405
+ @client.create_cert("staging-foo", "crt", "key")
406
+ end
407
+
408
+ it "#update_cert should perform a put request" do
409
+ @client.should_receive(:put).with("/apps/staging-foo/cert",
410
+ :cert => {:content => 'crt', :key => 'key'})
411
+ @client.update_cert("staging-foo", "crt", "key")
412
+ end
413
+ end
414
+
396
415
  describe "#request_parameters" do
397
416
  it "should return hash of resquest parameters" do
398
417
  expected = {
metadata CHANGED
@@ -1,195 +1,223 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: shelly
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.6
4
+ version: 0.4.7
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-10-01 00:00:00.000000000 Z
11
+ date: 2013-10-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
+ type: :development
15
+ prerelease: false
14
16
  name: rspec
15
- requirement: !ruby/object:Gem::Requirement
17
+ version_requirements: !ruby/object:Gem::Requirement
16
18
  requirements:
17
19
  - - ~>
18
20
  - !ruby/object:Gem::Version
19
21
  version: 2.11.0
20
- type: :development
21
- prerelease: false
22
- version_requirements: !ruby/object:Gem::Requirement
22
+ requirement: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ~>
25
25
  - !ruby/object:Gem::Version
26
26
  version: 2.11.0
27
27
  - !ruby/object:Gem::Dependency
28
+ type: :development
29
+ prerelease: false
28
30
  name: rake
31
+ version_requirements: !ruby/object:Gem::Requirement
32
+ requirements:
33
+ - - ! '>='
34
+ - !ruby/object:Gem::Version
35
+ version: '0'
29
36
  requirement: !ruby/object:Gem::Requirement
30
37
  requirements:
31
- - - '>='
38
+ - - ! '>='
32
39
  - !ruby/object:Gem::Version
33
40
  version: '0'
41
+ - !ruby/object:Gem::Dependency
34
42
  type: :development
35
43
  prerelease: false
44
+ name: guard
36
45
  version_requirements: !ruby/object:Gem::Requirement
37
46
  requirements:
38
- - - '>='
47
+ - - ! '>='
39
48
  - !ruby/object:Gem::Version
40
49
  version: '0'
41
- - !ruby/object:Gem::Dependency
42
- name: guard
43
50
  requirement: !ruby/object:Gem::Requirement
44
51
  requirements:
45
- - - '>='
52
+ - - ! '>='
46
53
  - !ruby/object:Gem::Version
47
54
  version: '0'
55
+ - !ruby/object:Gem::Dependency
48
56
  type: :development
49
57
  prerelease: false
58
+ name: guard-rspec
50
59
  version_requirements: !ruby/object:Gem::Requirement
51
60
  requirements:
52
- - - '>='
61
+ - - ! '>='
53
62
  - !ruby/object:Gem::Version
54
63
  version: '0'
55
- - !ruby/object:Gem::Dependency
56
- name: guard-rspec
57
64
  requirement: !ruby/object:Gem::Requirement
58
65
  requirements:
59
- - - '>='
66
+ - - ! '>='
60
67
  - !ruby/object:Gem::Version
61
68
  version: '0'
69
+ - !ruby/object:Gem::Dependency
62
70
  type: :development
63
71
  prerelease: false
72
+ name: simplecov
64
73
  version_requirements: !ruby/object:Gem::Requirement
65
74
  requirements:
66
- - - '>='
75
+ - - ! '>='
67
76
  - !ruby/object:Gem::Version
68
77
  version: '0'
69
- - !ruby/object:Gem::Dependency
70
- name: simplecov
71
78
  requirement: !ruby/object:Gem::Requirement
72
79
  requirements:
73
- - - '>='
80
+ - - ! '>='
74
81
  - !ruby/object:Gem::Version
75
82
  version: '0'
83
+ - !ruby/object:Gem::Dependency
76
84
  type: :development
77
85
  prerelease: false
86
+ name: ruby_gntp
78
87
  version_requirements: !ruby/object:Gem::Requirement
79
88
  requirements:
80
- - - '>='
89
+ - - ! '>='
81
90
  - !ruby/object:Gem::Version
82
91
  version: '0'
83
- - !ruby/object:Gem::Dependency
84
- name: fakefs
85
92
  requirement: !ruby/object:Gem::Requirement
86
93
  requirements:
87
- - - '>='
94
+ - - ! '>='
88
95
  - !ruby/object:Gem::Version
89
96
  version: '0'
97
+ - !ruby/object:Gem::Dependency
90
98
  type: :development
91
99
  prerelease: false
100
+ name: rb-fsevent
92
101
  version_requirements: !ruby/object:Gem::Requirement
93
102
  requirements:
94
- - - '>='
103
+ - - ! '>='
95
104
  - !ruby/object:Gem::Version
96
105
  version: '0'
97
- - !ruby/object:Gem::Dependency
98
- name: fakeweb
99
106
  requirement: !ruby/object:Gem::Requirement
100
107
  requirements:
101
- - - '>='
108
+ - - ! '>='
102
109
  - !ruby/object:Gem::Version
103
110
  version: '0'
111
+ - !ruby/object:Gem::Dependency
104
112
  type: :development
105
113
  prerelease: false
114
+ name: fakefs
106
115
  version_requirements: !ruby/object:Gem::Requirement
107
116
  requirements:
108
- - - '>='
117
+ - - ! '>='
118
+ - !ruby/object:Gem::Version
119
+ version: '0'
120
+ requirement: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ! '>='
109
123
  - !ruby/object:Gem::Version
110
124
  version: '0'
111
125
  - !ruby/object:Gem::Dependency
112
- name: wijet-thor
126
+ type: :development
127
+ prerelease: false
128
+ name: fakeweb
129
+ version_requirements: !ruby/object:Gem::Requirement
130
+ requirements:
131
+ - - ! '>='
132
+ - !ruby/object:Gem::Version
133
+ version: '0'
113
134
  requirement: !ruby/object:Gem::Requirement
114
135
  requirements:
115
- - - ~>
136
+ - - ! '>='
116
137
  - !ruby/object:Gem::Version
117
- version: 0.14.10
138
+ version: '0'
139
+ - !ruby/object:Gem::Dependency
118
140
  type: :runtime
119
141
  prerelease: false
142
+ name: wijet-thor
120
143
  version_requirements: !ruby/object:Gem::Requirement
121
144
  requirements:
122
145
  - - ~>
123
146
  - !ruby/object:Gem::Version
124
147
  version: 0.14.10
125
- - !ruby/object:Gem::Dependency
126
- name: rest-client
127
148
  requirement: !ruby/object:Gem::Requirement
128
149
  requirements:
129
- - - '>='
150
+ - - ~>
130
151
  - !ruby/object:Gem::Version
131
- version: '0'
152
+ version: 0.14.10
153
+ - !ruby/object:Gem::Dependency
132
154
  type: :runtime
133
155
  prerelease: false
156
+ name: rest-client
134
157
  version_requirements: !ruby/object:Gem::Requirement
135
158
  requirements:
136
- - - '>='
159
+ - - ! '>='
137
160
  - !ruby/object:Gem::Version
138
161
  version: '0'
139
- - !ruby/object:Gem::Dependency
140
- name: json
141
162
  requirement: !ruby/object:Gem::Requirement
142
163
  requirements:
143
- - - '>='
164
+ - - ! '>='
144
165
  - !ruby/object:Gem::Version
145
166
  version: '0'
167
+ - !ruby/object:Gem::Dependency
146
168
  type: :runtime
147
169
  prerelease: false
170
+ name: json
148
171
  version_requirements: !ruby/object:Gem::Requirement
149
172
  requirements:
150
- - - '>='
173
+ - - ! '>='
151
174
  - !ruby/object:Gem::Version
152
175
  version: '0'
153
- - !ruby/object:Gem::Dependency
154
- name: progressbar
155
176
  requirement: !ruby/object:Gem::Requirement
156
177
  requirements:
157
- - - '>='
178
+ - - ! '>='
158
179
  - !ruby/object:Gem::Version
159
180
  version: '0'
181
+ - !ruby/object:Gem::Dependency
160
182
  type: :runtime
161
183
  prerelease: false
184
+ name: progressbar
162
185
  version_requirements: !ruby/object:Gem::Requirement
163
186
  requirements:
164
- - - '>='
187
+ - - ! '>='
165
188
  - !ruby/object:Gem::Version
166
189
  version: '0'
167
- - !ruby/object:Gem::Dependency
168
- name: launchy
169
190
  requirement: !ruby/object:Gem::Requirement
170
191
  requirements:
171
- - - '>='
192
+ - - ! '>='
172
193
  - !ruby/object:Gem::Version
173
194
  version: '0'
195
+ - !ruby/object:Gem::Dependency
174
196
  type: :runtime
175
197
  prerelease: false
198
+ name: launchy
176
199
  version_requirements: !ruby/object:Gem::Requirement
177
200
  requirements:
178
- - - '>='
201
+ - - ! '>='
179
202
  - !ruby/object:Gem::Version
180
203
  version: '0'
181
- - !ruby/object:Gem::Dependency
182
- name: netrc
183
204
  requirement: !ruby/object:Gem::Requirement
184
205
  requirements:
185
- - - '>='
206
+ - - ! '>='
186
207
  - !ruby/object:Gem::Version
187
208
  version: '0'
209
+ - !ruby/object:Gem::Dependency
188
210
  type: :runtime
189
211
  prerelease: false
212
+ name: netrc
190
213
  version_requirements: !ruby/object:Gem::Requirement
191
214
  requirements:
192
- - - '>='
215
+ - - ! '>='
216
+ - !ruby/object:Gem::Version
217
+ version: '0'
218
+ requirement: !ruby/object:Gem::Requirement
219
+ requirements:
220
+ - - ! '>='
193
221
  - !ruby/object:Gem::Version
194
222
  version: '0'
195
223
  description: Tool for managing applications and clouds at shellycloud.com
@@ -216,6 +244,7 @@ files:
216
244
  - lib/shelly/app.rb
217
245
  - lib/shelly/backup.rb
218
246
  - lib/shelly/cli/backup.rb
247
+ - lib/shelly/cli/cert.rb
219
248
  - lib/shelly/cli/command.rb
220
249
  - lib/shelly/cli/config.rb
221
250
  - lib/shelly/cli/database.rb
@@ -232,6 +261,7 @@ files:
232
261
  - lib/shelly/client/application_logs.rb
233
262
  - lib/shelly/client/apps.rb
234
263
  - lib/shelly/client/auth.rb
264
+ - lib/shelly/client/cert.rb
235
265
  - lib/shelly/client/configs.rb
236
266
  - lib/shelly/client/database_backups.rb
237
267
  - lib/shelly/client/deployment_logs.rb
@@ -262,6 +292,7 @@ files:
262
292
  - spec/shelly/app_spec.rb
263
293
  - spec/shelly/backup_spec.rb
264
294
  - spec/shelly/cli/backup_spec.rb
295
+ - spec/shelly/cli/cert_spec.rb
265
296
  - spec/shelly/cli/config_spec.rb
266
297
  - spec/shelly/cli/database_spec.rb
267
298
  - spec/shelly/cli/deploy_spec.rb
@@ -290,18 +321,42 @@ require_paths:
290
321
  - lib
291
322
  required_ruby_version: !ruby/object:Gem::Requirement
292
323
  requirements:
293
- - - '>='
324
+ - - ! '>='
294
325
  - !ruby/object:Gem::Version
295
326
  version: '0'
296
327
  required_rubygems_version: !ruby/object:Gem::Requirement
297
328
  requirements:
298
- - - '>='
329
+ - - ! '>='
299
330
  - !ruby/object:Gem::Version
300
331
  version: '0'
301
332
  requirements: []
302
333
  rubyforge_project: shelly
303
- rubygems_version: 2.0.6
334
+ rubygems_version: 2.1.5
304
335
  signing_key:
305
336
  specification_version: 4
306
337
  summary: Shelly Cloud command line tool
307
- test_files: []
338
+ test_files:
339
+ - spec/helpers.rb
340
+ - spec/input_faker.rb
341
+ - spec/shelly/app_spec.rb
342
+ - spec/shelly/backup_spec.rb
343
+ - spec/shelly/cli/backup_spec.rb
344
+ - spec/shelly/cli/cert_spec.rb
345
+ - spec/shelly/cli/config_spec.rb
346
+ - spec/shelly/cli/database_spec.rb
347
+ - spec/shelly/cli/deploy_spec.rb
348
+ - spec/shelly/cli/file_spec.rb
349
+ - spec/shelly/cli/logs_spec.rb
350
+ - spec/shelly/cli/main_spec.rb
351
+ - spec/shelly/cli/organization_spec.rb
352
+ - spec/shelly/cli/runner_spec.rb
353
+ - spec/shelly/cli/user_spec.rb
354
+ - spec/shelly/client_spec.rb
355
+ - spec/shelly/cloudfile_spec.rb
356
+ - spec/shelly/download_progress_bar_spec.rb
357
+ - spec/shelly/model_spec.rb
358
+ - spec/shelly/organization_spec.rb
359
+ - spec/shelly/structure_validator_spec.rb
360
+ - spec/shelly/user_spec.rb
361
+ - spec/spec_helper.rb
362
+ - spec/thor/options_spec.rb