shelly 0.4.21 → 0.4.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,15 +1,7 @@
1
1
  ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- NDdlYTA5ZTNlZDdhNTdhNDNmNjFiMzE2Njk0ZDZjN2NiOTBiZjYyMw==
5
- data.tar.gz: !binary |-
6
- NGNhNjJjZmIzZTE4NDkyMjIzOThkYWE0Yjk1Y2RjODdmNDJlODc0ZQ==
2
+ SHA1:
3
+ metadata.gz: 545be45650bd9ce16d17c0ab7dfec2792a6b4edd
4
+ data.tar.gz: e80d05c0fad6c11775d524a43562f8cf95939720
7
5
  SHA512:
8
- metadata.gz: !binary |-
9
- NzI5YWUxNDAxNzExNGJkNjFiNGE1ZTM5NjAwN2ZiMmNjYjljODMzNmI5NDdk
10
- ZTEyMjBkNzBhZWY2YmE2NDY0ZDNiMWZlNTFlNjVkMGE0MjFiZWY1M2Q1MDY5
11
- NDkyZjUyYzY2NjQwNmM1YzE1YTYwZjY0MTc0MTdkZDFhZmIzYzM=
12
- data.tar.gz: !binary |-
13
- NjhkYjkwY2QxZTMwMzBjNDU5MzFlODZlMjVkNmQ0NmEwMTAzMTk5MWIxZGMw
14
- MGFlYzhiNjBiNWVlOGYzZTk0YzE1ZjA5ODgyZGZkYjZmYjc2YTdjNGYzMWI4
15
- ZDNlODlkMzYxZTMyNGYzYjhmOTdkM2Q2MDgzMTIzNzcyNDI5YmU=
6
+ metadata.gz: 1172c76aceccf7697fdb9689de43fb0004886c92eef6cc8489a920650afd59579a92a760b51a761706dd0ea28e34975365d4c53eb78293c007fd61876919eee8
7
+ data.tar.gz: a5df073a82931e5ff68b7e7144ca3d841c84621f9284b64175f47fedeb92a1c3845b8c6152099923c89a9261177dcc018e8026aa12ccf34cfd30fc2093f2891f
data/.gitignore CHANGED
@@ -5,3 +5,6 @@ Gemfile.lock
5
5
  pkg/*
6
6
  .rvmrc
7
7
  coverage
8
+
9
+ /.ruby-gemset
10
+ /.ruby-version
data/CHANGELOG.md CHANGED
@@ -1,3 +1,9 @@
1
+ ## 0.4.22 / 2014-02-07
2
+
3
+ * [improvement] Update shelly after confirmation
4
+ * [improvement] User can specify SSH public key to be
5
+ uploaded with `shelly login --key PATH` (Done by https://github.com/we5)
6
+
1
7
  ## 0.4.21 / 2014-01-15
2
8
 
3
9
  * [improvement] destination path when uploading files to Shelly Cloud
@@ -55,14 +55,22 @@ module Shelly
55
55
  end
56
56
 
57
57
  desc "login [EMAIL]", "Log into Shelly Cloud"
58
+ method_option :key, :alias => :k, :desc => "Path to specific SSH key", :default => nil
58
59
  def login(email = nil)
59
60
  user = Shelly::User.new
60
- say "Your public SSH key will be uploaded to Shelly Cloud after login."
61
- raise Errno::ENOENT, user.ssh_key.path unless user.ssh_key.exists?
61
+
62
+ if options[:key]
63
+ given_key = Shelly::SshKey.new(options[:key])
64
+ say "Your given SSH key (#{given_key.path}) will be uploaded to Shelly Cloud after login."
65
+ raise Errno::ENOENT, given_key.path unless given_key.exists?
66
+ else
67
+ say "Your public SSH key will be uploaded to Shelly Cloud after login."
68
+ raise Errno::ENOENT, user.ssh_key.path unless user.ssh_key.exists?
69
+ end
62
70
  email ||= ask_for_email
63
71
  password = ask_for_password(:with_confirmation => false)
64
72
  user.login(email, password)
65
- upload_ssh_key
73
+ upload_ssh_key(options[:key])
66
74
  say "Login successful", :green
67
75
  list
68
76
  rescue Client::ValidationException => e
@@ -465,17 +473,19 @@ Wait until cloud is in 'turned off' state and try again.}
465
473
  say_new_line
466
474
  end
467
475
 
468
- def upload_ssh_key
476
+ def upload_ssh_key(given_key_path = nil)
469
477
  user = Shelly::User.new
470
- if user.ssh_key.exists?
471
- if user.ssh_key.uploaded?
472
- say "Your SSH key from #{user.ssh_key.path} is already uploaded"
478
+ ssh_key = given_key_path ? Shelly::SshKey.new(given_key_path) : user.ssh_key
479
+
480
+ if ssh_key.exists?
481
+ if ssh_key.uploaded?
482
+ say "Your SSH key from #{ssh_key.path} is already uploaded"
473
483
  else
474
- say "Uploading your public SSH key from #{user.ssh_key.path}"
475
- user.ssh_key.upload
484
+ say "Uploading your public SSH key from #{ssh_key.path}"
485
+ ssh_key.upload
476
486
  end
477
487
  else
478
- say_error "No such file or directory - #{user.ssh_key_path}", :with_exit => false
488
+ say_error "No such file or directory - #{ssh_key_path}", :with_exit => false
479
489
  say_error "Use ssh-keygen to generate ssh key pair, after that use: `shelly login`", :with_exit => false
480
490
  end
481
491
  rescue Client::ValidationException => e
@@ -28,8 +28,11 @@ module Shelly
28
28
  raise if debug?
29
29
  say "Required shelly gem version: #{e.body["required_version"]}"
30
30
  say "Your version: #{VERSION}"
31
- say "Update shelly gem with `gem install shelly`"
32
- say_error "or `bundle update shelly` when using bundler"
31
+ if yes? "Update shelly gem?"
32
+ system "gem install shelly"
33
+ else
34
+ say_error "Update shelly gem with `gem install shelly`"
35
+ end
33
36
  rescue Interrupt
34
37
  raise if debug?
35
38
  say_new_line
@@ -1,3 +1,3 @@
1
1
  module Shelly
2
- VERSION = "0.4.21"
2
+ VERSION = "0.4.22"
3
3
  end
data/shelly.gemspec CHANGED
@@ -20,7 +20,7 @@ Gem::Specification.new do |s|
20
20
  s.add_development_dependency "ruby_gntp"
21
21
  s.add_development_dependency "rb-fsevent"
22
22
  end
23
- s.add_development_dependency "fakefs"
23
+ s.add_development_dependency "fakefs", "~> 0.4.3"
24
24
  s.add_development_dependency "fakeweb"
25
25
  s.add_runtime_dependency "wijet-thor", "~> 0.14.10"
26
26
  s.add_runtime_dependency "rest-client"
@@ -154,13 +154,12 @@ describe Shelly::CLI::Main do
154
154
  end
155
155
  end
156
156
 
157
- describe "#login" do
158
- let(:key_path) { File.expand_path("~/.ssh/id_rsa.pub") }
159
-
157
+ shared_examples "login" do
160
158
  before do
161
- user.ssh_key.stub(:upload => nil, :uploaded? => false)
159
+ Shelly::SshKey.any_instance.stub(:upload => nil, :uploaded? => false)
162
160
  FileUtils.mkdir_p("~/.ssh")
163
161
  File.open(key_path, "w") { |f| f << "ssh-rsa AAAAB3NzaC1" }
162
+ @main.options = main_options
164
163
  @client.stub(:apps).and_return([
165
164
  {"code_name" => "abc", "state" => "running",
166
165
  "state_description" => "running"},
@@ -187,8 +186,15 @@ describe Shelly::CLI::Main do
187
186
  end
188
187
  end
189
188
 
189
+ it "should accept given path to specific key as parameter" do
190
+ $stdout.should_receive(:puts).with(green "Login successful")
191
+ fake_stdin(["secret"]) do
192
+ invoke(@main, :login, "megan@example.com")
193
+ end
194
+ end
195
+
190
196
  it "should upload user's public SSH key" do
191
- user.ssh_key.should_receive(:upload)
197
+ Shelly::SshKey.any_instance.should_receive(:upload)
192
198
  $stdout.should_receive(:puts).with("Uploading your public SSH key from #{key_path}")
193
199
  fake_stdin(["megan@example.com", "secret"]) do
194
200
  invoke(@main, :login)
@@ -206,7 +212,7 @@ describe Shelly::CLI::Main do
206
212
 
207
213
  context "SSH key already uploaded" do
208
214
  it "should display message to user" do
209
- user.ssh_key.stub(:uploaded? => true)
215
+ Shelly::SshKey.any_instance.stub(:uploaded? => true)
210
216
  $stdout.should_receive(:puts).with("Your SSH key from #{key_path} is already uploaded")
211
217
  fake_stdin(["megan@example.com", "secret"]) do
212
218
  invoke(@main, :login)
@@ -219,7 +225,7 @@ describe Shelly::CLI::Main do
219
225
  body = {"message" => "Validation Failed",
220
226
  "errors" => [["fingerprint", "already exists. This SSH key is already in use"]]}
221
227
  ex = Shelly::Client::ValidationException.new(body)
222
- user.ssh_key.stub(:upload).and_raise(ex)
228
+ Shelly::SshKey.any_instance.stub(:upload).and_raise(ex)
223
229
  user.should_receive(:logout)
224
230
  $stdout.should_receive(:puts).with(red "Fingerprint already exists. This SSH key is already in use")
225
231
  lambda {
@@ -276,6 +282,22 @@ describe Shelly::CLI::Main do
276
282
  end
277
283
  end
278
284
 
285
+ describe "#login" do
286
+ context "with default keys in place" do
287
+ let(:key_path) { File.expand_path("~/.ssh/id_rsa.pub") }
288
+ let(:main_options) { {} }
289
+
290
+ it_behaves_like "login"
291
+ end
292
+
293
+ context "with given path to specific key" do
294
+ let(:key_path) { File.expand_path("~/.ssh/specific.pub") }
295
+ let(:main_options) { {:key => "~/.ssh/specific.pub"} }
296
+
297
+ it_behaves_like "login"
298
+ end
299
+ end
300
+
279
301
  describe "#add" do
280
302
  before do
281
303
  FileUtils.mkdir_p("/projects/foo")
@@ -56,13 +56,13 @@ describe Shelly::CLI::Runner do
56
56
  Shelly::CLI::Main.stub(:start).and_raise(Shelly::Client::GemVersionException.new(
57
57
  {"required_version" => "0.0.48"}))
58
58
  runner = Shelly::CLI::Runner.new(%w(login))
59
+ runner.should_receive(:system).with("gem install shelly")
59
60
  $stdout.should_receive(:puts).with("Required shelly gem version: 0.0.48")
60
61
  $stdout.should_receive(:puts).with("Your version: #{Shelly::VERSION}")
61
- $stdout.should_receive(:puts).with("Update shelly gem with `gem install shelly`")
62
- $stdout.should_receive(:puts).with("or `bundle update shelly` when using bundler")
63
- lambda {
62
+ $stdout.should_receive(:print).with("Update shelly gem? ")
63
+ fake_stdin(["yes"]) do
64
64
  runner.start
65
- }.should raise_error(SystemExit)
65
+ end
66
66
  end
67
67
 
68
68
  describe "API exception handling" do
metadata CHANGED
@@ -1,209 +1,209 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: shelly
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.21
4
+ version: 0.4.22
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: 2014-01-15 00:00:00.000000000 Z
11
+ date: 2014-02-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- type: :development
15
- prerelease: false
16
14
  name: rspec
17
- version_requirements: !ruby/object:Gem::Requirement
15
+ requirement: !ruby/object:Gem::Requirement
18
16
  requirements:
19
17
  - - ~>
20
18
  - !ruby/object:Gem::Version
21
19
  version: 2.11.0
22
- requirement: !ruby/object:Gem::Requirement
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !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
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '>='
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
28
34
  type: :development
29
35
  prerelease: false
30
- name: rake
31
36
  version_requirements: !ruby/object:Gem::Requirement
32
37
  requirements:
33
- - - ! '>='
38
+ - - '>='
34
39
  - !ruby/object:Gem::Version
35
40
  version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: simplecov
36
43
  requirement: !ruby/object:Gem::Requirement
37
44
  requirements:
38
- - - ! '>='
45
+ - - '>='
39
46
  - !ruby/object:Gem::Version
40
47
  version: '0'
41
- - !ruby/object:Gem::Dependency
42
48
  type: :development
43
49
  prerelease: false
44
- name: simplecov
45
50
  version_requirements: !ruby/object:Gem::Requirement
46
51
  requirements:
47
- - - ! '>='
52
+ - - '>='
48
53
  - !ruby/object:Gem::Version
49
54
  version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: ruby_gntp
50
57
  requirement: !ruby/object:Gem::Requirement
51
58
  requirements:
52
- - - ! '>='
59
+ - - '>='
53
60
  - !ruby/object:Gem::Version
54
61
  version: '0'
55
- - !ruby/object:Gem::Dependency
56
62
  type: :development
57
63
  prerelease: false
58
- name: ruby_gntp
59
64
  version_requirements: !ruby/object:Gem::Requirement
60
65
  requirements:
61
- - - ! '>='
66
+ - - '>='
62
67
  - !ruby/object:Gem::Version
63
68
  version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rb-fsevent
64
71
  requirement: !ruby/object:Gem::Requirement
65
72
  requirements:
66
- - - ! '>='
73
+ - - '>='
67
74
  - !ruby/object:Gem::Version
68
75
  version: '0'
69
- - !ruby/object:Gem::Dependency
70
76
  type: :development
71
77
  prerelease: false
72
- name: rb-fsevent
73
78
  version_requirements: !ruby/object:Gem::Requirement
74
79
  requirements:
75
- - - ! '>='
80
+ - - '>='
76
81
  - !ruby/object:Gem::Version
77
82
  version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: fakefs
78
85
  requirement: !ruby/object:Gem::Requirement
79
86
  requirements:
80
- - - ! '>='
87
+ - - ~>
81
88
  - !ruby/object:Gem::Version
82
- version: '0'
83
- - !ruby/object:Gem::Dependency
89
+ version: 0.4.3
84
90
  type: :development
85
91
  prerelease: false
86
- name: fakefs
87
92
  version_requirements: !ruby/object:Gem::Requirement
88
93
  requirements:
89
- - - ! '>='
94
+ - - ~>
90
95
  - !ruby/object:Gem::Version
91
- version: '0'
96
+ version: 0.4.3
97
+ - !ruby/object:Gem::Dependency
98
+ name: fakeweb
92
99
  requirement: !ruby/object:Gem::Requirement
93
100
  requirements:
94
- - - ! '>='
101
+ - - '>='
95
102
  - !ruby/object:Gem::Version
96
103
  version: '0'
97
- - !ruby/object:Gem::Dependency
98
104
  type: :development
99
105
  prerelease: false
100
- name: fakeweb
101
106
  version_requirements: !ruby/object:Gem::Requirement
102
107
  requirements:
103
- - - ! '>='
108
+ - - '>='
104
109
  - !ruby/object:Gem::Version
105
110
  version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: wijet-thor
106
113
  requirement: !ruby/object:Gem::Requirement
107
114
  requirements:
108
- - - ! '>='
115
+ - - ~>
109
116
  - !ruby/object:Gem::Version
110
- version: '0'
111
- - !ruby/object:Gem::Dependency
117
+ version: 0.14.10
112
118
  type: :runtime
113
119
  prerelease: false
114
- name: wijet-thor
115
120
  version_requirements: !ruby/object:Gem::Requirement
116
121
  requirements:
117
122
  - - ~>
118
123
  - !ruby/object:Gem::Version
119
124
  version: 0.14.10
125
+ - !ruby/object:Gem::Dependency
126
+ name: rest-client
120
127
  requirement: !ruby/object:Gem::Requirement
121
128
  requirements:
122
- - - ~>
129
+ - - '>='
123
130
  - !ruby/object:Gem::Version
124
- version: 0.14.10
125
- - !ruby/object:Gem::Dependency
131
+ version: '0'
126
132
  type: :runtime
127
133
  prerelease: false
128
- name: rest-client
129
134
  version_requirements: !ruby/object:Gem::Requirement
130
135
  requirements:
131
- - - ! '>='
136
+ - - '>='
132
137
  - !ruby/object:Gem::Version
133
138
  version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: mime-types
134
141
  requirement: !ruby/object:Gem::Requirement
135
142
  requirements:
136
- - - ! '>='
143
+ - - ~>
137
144
  - !ruby/object:Gem::Version
138
- version: '0'
139
- - !ruby/object:Gem::Dependency
145
+ version: '1.16'
140
146
  type: :runtime
141
147
  prerelease: false
142
- name: mime-types
143
148
  version_requirements: !ruby/object:Gem::Requirement
144
149
  requirements:
145
150
  - - ~>
146
151
  - !ruby/object:Gem::Version
147
152
  version: '1.16'
153
+ - !ruby/object:Gem::Dependency
154
+ name: json
148
155
  requirement: !ruby/object:Gem::Requirement
149
156
  requirements:
150
- - - ~>
157
+ - - '>='
151
158
  - !ruby/object:Gem::Version
152
- version: '1.16'
153
- - !ruby/object:Gem::Dependency
159
+ version: '0'
154
160
  type: :runtime
155
161
  prerelease: false
156
- name: json
157
162
  version_requirements: !ruby/object:Gem::Requirement
158
163
  requirements:
159
- - - ! '>='
164
+ - - '>='
160
165
  - !ruby/object:Gem::Version
161
166
  version: '0'
167
+ - !ruby/object:Gem::Dependency
168
+ name: progressbar
162
169
  requirement: !ruby/object:Gem::Requirement
163
170
  requirements:
164
- - - ! '>='
171
+ - - '>='
165
172
  - !ruby/object:Gem::Version
166
173
  version: '0'
167
- - !ruby/object:Gem::Dependency
168
174
  type: :runtime
169
175
  prerelease: false
170
- name: progressbar
171
176
  version_requirements: !ruby/object:Gem::Requirement
172
177
  requirements:
173
- - - ! '>='
178
+ - - '>='
174
179
  - !ruby/object:Gem::Version
175
180
  version: '0'
181
+ - !ruby/object:Gem::Dependency
182
+ name: launchy
176
183
  requirement: !ruby/object:Gem::Requirement
177
184
  requirements:
178
- - - ! '>='
185
+ - - '>='
179
186
  - !ruby/object:Gem::Version
180
187
  version: '0'
181
- - !ruby/object:Gem::Dependency
182
188
  type: :runtime
183
189
  prerelease: false
184
- name: launchy
185
190
  version_requirements: !ruby/object:Gem::Requirement
186
191
  requirements:
187
- - - ! '>='
192
+ - - '>='
188
193
  - !ruby/object:Gem::Version
189
194
  version: '0'
195
+ - !ruby/object:Gem::Dependency
196
+ name: netrc
190
197
  requirement: !ruby/object:Gem::Requirement
191
198
  requirements:
192
- - - ! '>='
199
+ - - '>='
193
200
  - !ruby/object:Gem::Version
194
201
  version: '0'
195
- - !ruby/object:Gem::Dependency
196
202
  type: :runtime
197
203
  prerelease: false
198
- name: netrc
199
204
  version_requirements: !ruby/object:Gem::Requirement
200
205
  requirements:
201
- - - ! '>='
202
- - !ruby/object:Gem::Version
203
- version: '0'
204
- requirement: !ruby/object:Gem::Requirement
205
- requirements:
206
- - - ! '>='
206
+ - - '>='
207
207
  - !ruby/object:Gem::Version
208
208
  version: '0'
209
209
  description: Tool for managing applications and clouds at shellycloud.com
@@ -310,17 +310,17 @@ require_paths:
310
310
  - lib
311
311
  required_ruby_version: !ruby/object:Gem::Requirement
312
312
  requirements:
313
- - - ! '>='
313
+ - - '>='
314
314
  - !ruby/object:Gem::Version
315
315
  version: '0'
316
316
  required_rubygems_version: !ruby/object:Gem::Requirement
317
317
  requirements:
318
- - - ! '>='
318
+ - - '>='
319
319
  - !ruby/object:Gem::Version
320
320
  version: '0'
321
321
  requirements: []
322
322
  rubyforge_project: shelly
323
- rubygems_version: 2.1.5
323
+ rubygems_version: 2.1.11
324
324
  signing_key:
325
325
  specification_version: 4
326
326
  summary: Shelly Cloud command line tool