shelly 0.0.26 → 0.0.27
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/README.md +1 -1
- data/lib/shelly/cli/main.rb +20 -0
- data/lib/shelly/cli/user.rb +0 -17
- data/lib/shelly/client.rb +6 -0
- data/lib/shelly/cloudfile.rb +7 -0
- data/lib/shelly/helpers.rb +13 -0
- data/lib/shelly/version.rb +1 -1
- data/spec/shelly/cli/main_spec.rb +54 -0
- metadata +148 -132
data/README.md
CHANGED
data/lib/shelly/cli/main.rb
CHANGED
@@ -126,6 +126,26 @@ module Shelly
|
|
126
126
|
end
|
127
127
|
map "status" => :list
|
128
128
|
|
129
|
+
desc "ip", "Lists clouds IP's"
|
130
|
+
def ip
|
131
|
+
say_error "Must be run inside your project git repository" unless App.inside_git_repository?
|
132
|
+
say_error "No Cloudfile found" unless Cloudfile.present?
|
133
|
+
@cloudfile = check_clouds.first
|
134
|
+
@cloudfile.fetch_ips.each do |server|
|
135
|
+
say "Cloud #{server['code_name']}:"
|
136
|
+
say "Web server IP : #{server['web_server_ip']}"
|
137
|
+
say "Mail server IP: #{server['mail_server_ip']}"
|
138
|
+
end
|
139
|
+
rescue Client::APIError => e
|
140
|
+
if e.unauthorized?
|
141
|
+
e.errors.each { |error| say_error error, :with_exit => false}
|
142
|
+
exit 1
|
143
|
+
else
|
144
|
+
say_error e.message
|
145
|
+
end
|
146
|
+
end
|
147
|
+
|
148
|
+
|
129
149
|
# FIXME: move to helpers
|
130
150
|
no_tasks do
|
131
151
|
def check_options(options)
|
data/lib/shelly/cli/user.rb
CHANGED
@@ -50,23 +50,6 @@ module Shelly
|
|
50
50
|
exit 1
|
51
51
|
end
|
52
52
|
end
|
53
|
-
|
54
|
-
no_tasks do
|
55
|
-
def check_clouds
|
56
|
-
@cloudfile = Shelly::Cloudfile.new
|
57
|
-
@user = Shelly::User.new
|
58
|
-
user_apps = @user.apps.map { |cloud| cloud['code_name'] }
|
59
|
-
unless @cloudfile.clouds.all? { |cloud| user_apps.include?(cloud) }
|
60
|
-
errors = (@cloudfile.clouds - user_apps).map do |cloud|
|
61
|
-
"You have no access to '#{cloud}' cloud defined in Cloudfile"
|
62
|
-
end
|
63
|
-
raise Shelly::Client::APIError.new({:message => "Unauthorized",
|
64
|
-
:errors => errors}.to_json)
|
65
|
-
end
|
66
|
-
[@cloudfile, @user]
|
67
|
-
end
|
68
|
-
|
69
|
-
end
|
70
53
|
end
|
71
54
|
end
|
72
55
|
end
|
data/lib/shelly/client.rb
CHANGED
data/lib/shelly/cloudfile.rb
CHANGED
data/lib/shelly/helpers.rb
CHANGED
@@ -27,6 +27,19 @@ module Shelly
|
|
27
27
|
say_error "Email can't be blank, please try again"
|
28
28
|
end
|
29
29
|
|
30
|
+
def check_clouds
|
31
|
+
@cloudfile = Shelly::Cloudfile.new
|
32
|
+
@user = Shelly::User.new
|
33
|
+
user_apps = @user.apps.map { |cloud| cloud['code_name'] }
|
34
|
+
unless @cloudfile.clouds.all? { |cloud| user_apps.include?(cloud) }
|
35
|
+
errors = (@cloudfile.clouds - user_apps).map do |cloud|
|
36
|
+
"You have no access to '#{cloud}' cloud defined in Cloudfile"
|
37
|
+
end
|
38
|
+
raise Shelly::Client::APIError.new({:message => "Unauthorized",
|
39
|
+
:errors => errors}.to_json)
|
40
|
+
end
|
41
|
+
[@cloudfile, @user]
|
42
|
+
end
|
30
43
|
end
|
31
44
|
end
|
32
45
|
|
data/lib/shelly/version.rb
CHANGED
@@ -25,6 +25,7 @@ describe Shelly::CLI::Main do
|
|
25
25
|
Tasks:
|
26
26
|
shelly add # Adds new cloud to Shelly Cloud
|
27
27
|
shelly help [TASK] # Describe available tasks or one specific task
|
28
|
+
shelly ip # Lists clouds IP's
|
28
29
|
shelly list # Lists all your clouds
|
29
30
|
shelly login [EMAIL] # Logs user in to Shelly Cloud
|
30
31
|
shelly register [EMAIL] # Registers new user account on Shelly Cloud
|
@@ -440,5 +441,58 @@ OUT
|
|
440
441
|
end
|
441
442
|
|
442
443
|
end
|
444
|
+
|
445
|
+
describe "#ips" do
|
446
|
+
before do
|
447
|
+
File.open("Cloudfile", 'w') {|f| f.write("foo-staging:\nfoo-production:\n") }
|
448
|
+
Shelly::App.stub(:inside_git_repository?).and_return(true)
|
449
|
+
end
|
450
|
+
|
451
|
+
it "should exit with message if command run outside git repository" do
|
452
|
+
Shelly::App.stub(:inside_git_repository?).and_return(false)
|
453
|
+
$stdout.should_receive(:puts).with("\e[31mMust be run inside your project git repository\e[0m")
|
454
|
+
lambda {
|
455
|
+
@main.ip
|
456
|
+
}.should raise_error(SystemExit)
|
457
|
+
end
|
458
|
+
|
459
|
+
it "should exit with message if there is no Cloudfile" do
|
460
|
+
File.delete("Cloudfile")
|
461
|
+
$stdout.should_receive(:puts).with("\e[31mNo Cloudfile found\e[0m")
|
462
|
+
lambda {
|
463
|
+
@main.ip
|
464
|
+
}.should raise_error(SystemExit)
|
465
|
+
end
|
466
|
+
|
467
|
+
context "on success" do
|
468
|
+
it "should display mail and web server ip's" do
|
469
|
+
@client.should_receive(:apps).and_return([{"code_name" => "foo-production"},{"code_name" => "foo-staging"}])
|
470
|
+
@client.stub(:apps_ips).and_return(response)
|
471
|
+
$stdout.should_receive(:puts).with("Cloud foo-production:")
|
472
|
+
$stdout.should_receive(:puts).with("Web server IP : 22.22.22.22")
|
473
|
+
$stdout.should_receive(:puts).with("Mail server IP: 11.11.11.11")
|
474
|
+
@main.ip
|
475
|
+
end
|
476
|
+
end
|
477
|
+
|
478
|
+
def response
|
479
|
+
[{'code_name' => 'foo-production', 'mail_server_ip' => '11.11.11.11', 'web_server_ip' => '22.22.22.22'}]
|
480
|
+
end
|
481
|
+
|
482
|
+
context "on failure" do
|
483
|
+
it "should raise an error if user is not in git repository" do
|
484
|
+
Shelly::App.stub(:inside_git_repository?).and_return(false)
|
485
|
+
$stdout.should_receive(:puts).with("\e[31mMust be run inside your project git repository\e[0m")
|
486
|
+
lambda { @main.ip }.should raise_error(SystemExit)
|
487
|
+
end
|
488
|
+
|
489
|
+
it "should raise an error if user does not have access to cloud" do
|
490
|
+
@client.should_receive(:apps).and_return([{"code_name" => "foo-production"}])
|
491
|
+
@client.stub(:apps_users).and_return(response)
|
492
|
+
$stdout.should_receive(:puts).with("\e[31mYou have no access to 'foo-staging' cloud defined in Cloudfile\e[0m")
|
493
|
+
lambda { @main.ip }.should raise_error(SystemExit)
|
494
|
+
end
|
495
|
+
end
|
496
|
+
end
|
443
497
|
end
|
444
498
|
|
metadata
CHANGED
@@ -1,156 +1,174 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: shelly
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 41
|
5
5
|
prerelease:
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 0
|
9
|
+
- 27
|
10
|
+
version: 0.0.27
|
6
11
|
platform: ruby
|
7
|
-
authors:
|
12
|
+
authors:
|
8
13
|
- Shelly Cloud team
|
9
14
|
autorequire:
|
10
15
|
bindir: bin
|
11
16
|
cert_chain: []
|
12
|
-
|
13
|
-
|
14
|
-
|
17
|
+
|
18
|
+
date: 2011-12-05 00:00:00 Z
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
15
21
|
name: rspec
|
16
|
-
requirement: &2156723600 !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
|
-
requirements:
|
19
|
-
- - ! '>='
|
20
|
-
- !ruby/object:Gem::Version
|
21
|
-
version: '0'
|
22
|
-
type: :development
|
23
22
|
prerelease: false
|
24
|
-
|
25
|
-
- !ruby/object:Gem::Dependency
|
26
|
-
name: rake
|
27
|
-
requirement: &2156723140 !ruby/object:Gem::Requirement
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
28
24
|
none: false
|
29
|
-
requirements:
|
30
|
-
- -
|
31
|
-
- !ruby/object:Gem::Version
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
- !ruby/object:Gem::Dependency
|
37
|
-
name: guard
|
38
|
-
requirement: &2156722620 !ruby/object:Gem::Requirement
|
39
|
-
none: false
|
40
|
-
requirements:
|
41
|
-
- - ! '>='
|
42
|
-
- !ruby/object:Gem::Version
|
43
|
-
version: '0'
|
25
|
+
requirements:
|
26
|
+
- - ">="
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
hash: 3
|
29
|
+
segments:
|
30
|
+
- 0
|
31
|
+
version: "0"
|
44
32
|
type: :development
|
33
|
+
version_requirements: *id001
|
34
|
+
- !ruby/object:Gem::Dependency
|
35
|
+
name: rake
|
45
36
|
prerelease: false
|
46
|
-
|
47
|
-
- !ruby/object:Gem::Dependency
|
48
|
-
name: guard-rspec
|
49
|
-
requirement: &2156722100 !ruby/object:Gem::Requirement
|
37
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
50
38
|
none: false
|
51
|
-
requirements:
|
52
|
-
- -
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
|
39
|
+
requirements:
|
40
|
+
- - ">="
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
hash: 3
|
43
|
+
segments:
|
44
|
+
- 0
|
45
|
+
version: "0"
|
55
46
|
type: :development
|
47
|
+
version_requirements: *id002
|
48
|
+
- !ruby/object:Gem::Dependency
|
49
|
+
name: guard
|
56
50
|
prerelease: false
|
57
|
-
|
58
|
-
- !ruby/object:Gem::Dependency
|
59
|
-
name: growl_notify
|
60
|
-
requirement: &2156721580 !ruby/object:Gem::Requirement
|
51
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
61
52
|
none: false
|
62
|
-
requirements:
|
63
|
-
- -
|
64
|
-
- !ruby/object:Gem::Version
|
65
|
-
|
53
|
+
requirements:
|
54
|
+
- - ">="
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
hash: 3
|
57
|
+
segments:
|
58
|
+
- 0
|
59
|
+
version: "0"
|
66
60
|
type: :development
|
61
|
+
version_requirements: *id003
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: guard-rspec
|
67
64
|
prerelease: false
|
68
|
-
|
69
|
-
- !ruby/object:Gem::Dependency
|
70
|
-
name: rb-fsevent
|
71
|
-
requirement: &2156721160 !ruby/object:Gem::Requirement
|
65
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
72
66
|
none: false
|
73
|
-
requirements:
|
74
|
-
- -
|
75
|
-
- !ruby/object:Gem::Version
|
76
|
-
|
67
|
+
requirements:
|
68
|
+
- - ">="
|
69
|
+
- !ruby/object:Gem::Version
|
70
|
+
hash: 3
|
71
|
+
segments:
|
72
|
+
- 0
|
73
|
+
version: "0"
|
77
74
|
type: :development
|
78
|
-
|
79
|
-
|
80
|
-
- !ruby/object:Gem::Dependency
|
75
|
+
version_requirements: *id004
|
76
|
+
- !ruby/object:Gem::Dependency
|
81
77
|
name: fakefs
|
82
|
-
|
78
|
+
prerelease: false
|
79
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
83
80
|
none: false
|
84
|
-
requirements:
|
85
|
-
- -
|
86
|
-
- !ruby/object:Gem::Version
|
87
|
-
|
81
|
+
requirements:
|
82
|
+
- - ">="
|
83
|
+
- !ruby/object:Gem::Version
|
84
|
+
hash: 3
|
85
|
+
segments:
|
86
|
+
- 0
|
87
|
+
version: "0"
|
88
88
|
type: :development
|
89
|
-
|
90
|
-
|
91
|
-
- !ruby/object:Gem::Dependency
|
89
|
+
version_requirements: *id005
|
90
|
+
- !ruby/object:Gem::Dependency
|
92
91
|
name: fakeweb
|
93
|
-
|
92
|
+
prerelease: false
|
93
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
94
94
|
none: false
|
95
|
-
requirements:
|
96
|
-
- -
|
97
|
-
- !ruby/object:Gem::Version
|
98
|
-
|
95
|
+
requirements:
|
96
|
+
- - ">="
|
97
|
+
- !ruby/object:Gem::Version
|
98
|
+
hash: 3
|
99
|
+
segments:
|
100
|
+
- 0
|
101
|
+
version: "0"
|
99
102
|
type: :development
|
100
|
-
|
101
|
-
|
102
|
-
- !ruby/object:Gem::Dependency
|
103
|
+
version_requirements: *id006
|
104
|
+
- !ruby/object:Gem::Dependency
|
103
105
|
name: wijet-thor
|
104
|
-
|
106
|
+
prerelease: false
|
107
|
+
requirement: &id007 !ruby/object:Gem::Requirement
|
105
108
|
none: false
|
106
|
-
requirements:
|
109
|
+
requirements:
|
107
110
|
- - ~>
|
108
|
-
- !ruby/object:Gem::Version
|
111
|
+
- !ruby/object:Gem::Version
|
112
|
+
hash: 41
|
113
|
+
segments:
|
114
|
+
- 0
|
115
|
+
- 14
|
116
|
+
- 7
|
109
117
|
version: 0.14.7
|
110
118
|
type: :runtime
|
111
|
-
|
112
|
-
|
113
|
-
- !ruby/object:Gem::Dependency
|
119
|
+
version_requirements: *id007
|
120
|
+
- !ruby/object:Gem::Dependency
|
114
121
|
name: rest-client
|
115
|
-
|
122
|
+
prerelease: false
|
123
|
+
requirement: &id008 !ruby/object:Gem::Requirement
|
116
124
|
none: false
|
117
|
-
requirements:
|
118
|
-
- -
|
119
|
-
- !ruby/object:Gem::Version
|
120
|
-
|
125
|
+
requirements:
|
126
|
+
- - ">="
|
127
|
+
- !ruby/object:Gem::Version
|
128
|
+
hash: 3
|
129
|
+
segments:
|
130
|
+
- 0
|
131
|
+
version: "0"
|
121
132
|
type: :runtime
|
122
|
-
|
123
|
-
|
124
|
-
- !ruby/object:Gem::Dependency
|
133
|
+
version_requirements: *id008
|
134
|
+
- !ruby/object:Gem::Dependency
|
125
135
|
name: json
|
126
|
-
|
136
|
+
prerelease: false
|
137
|
+
requirement: &id009 !ruby/object:Gem::Requirement
|
127
138
|
none: false
|
128
|
-
requirements:
|
129
|
-
- -
|
130
|
-
- !ruby/object:Gem::Version
|
131
|
-
|
139
|
+
requirements:
|
140
|
+
- - ">="
|
141
|
+
- !ruby/object:Gem::Version
|
142
|
+
hash: 3
|
143
|
+
segments:
|
144
|
+
- 0
|
145
|
+
version: "0"
|
132
146
|
type: :runtime
|
133
|
-
|
134
|
-
|
135
|
-
- !ruby/object:Gem::Dependency
|
147
|
+
version_requirements: *id009
|
148
|
+
- !ruby/object:Gem::Dependency
|
136
149
|
name: wijet-launchy
|
137
|
-
|
150
|
+
prerelease: false
|
151
|
+
requirement: &id010 !ruby/object:Gem::Requirement
|
138
152
|
none: false
|
139
|
-
requirements:
|
140
|
-
- -
|
141
|
-
- !ruby/object:Gem::Version
|
142
|
-
|
153
|
+
requirements:
|
154
|
+
- - ">="
|
155
|
+
- !ruby/object:Gem::Version
|
156
|
+
hash: 3
|
157
|
+
segments:
|
158
|
+
- 0
|
159
|
+
version: "0"
|
143
160
|
type: :runtime
|
144
|
-
|
145
|
-
version_requirements: *2156717980
|
161
|
+
version_requirements: *id010
|
146
162
|
description: Tool for managing applications and clouds at shellycloud.com
|
147
|
-
email:
|
163
|
+
email:
|
148
164
|
- support@shellycloud.com
|
149
|
-
executables:
|
165
|
+
executables:
|
150
166
|
- shelly
|
151
167
|
extensions: []
|
168
|
+
|
152
169
|
extra_rdoc_files: []
|
153
|
-
|
170
|
+
|
171
|
+
files:
|
154
172
|
- .gitignore
|
155
173
|
- .travis.yml
|
156
174
|
- Gemfile
|
@@ -190,38 +208,36 @@ files:
|
|
190
208
|
- spec/thor/options_spec.rb
|
191
209
|
homepage: http://shellycloud.com
|
192
210
|
licenses: []
|
211
|
+
|
193
212
|
post_install_message:
|
194
213
|
rdoc_options: []
|
195
|
-
|
214
|
+
|
215
|
+
require_paths:
|
196
216
|
- lib
|
197
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
217
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
198
218
|
none: false
|
199
|
-
requirements:
|
200
|
-
- -
|
201
|
-
- !ruby/object:Gem::Version
|
202
|
-
|
203
|
-
|
219
|
+
requirements:
|
220
|
+
- - ">="
|
221
|
+
- !ruby/object:Gem::Version
|
222
|
+
hash: 3
|
223
|
+
segments:
|
224
|
+
- 0
|
225
|
+
version: "0"
|
226
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
204
227
|
none: false
|
205
|
-
requirements:
|
206
|
-
- -
|
207
|
-
- !ruby/object:Gem::Version
|
208
|
-
|
228
|
+
requirements:
|
229
|
+
- - ">="
|
230
|
+
- !ruby/object:Gem::Version
|
231
|
+
hash: 3
|
232
|
+
segments:
|
233
|
+
- 0
|
234
|
+
version: "0"
|
209
235
|
requirements: []
|
236
|
+
|
210
237
|
rubyforge_project: shelly
|
211
238
|
rubygems_version: 1.8.10
|
212
239
|
signing_key:
|
213
240
|
specification_version: 3
|
214
241
|
summary: Shelly Cloud command line tool
|
215
|
-
test_files:
|
216
|
-
|
217
|
-
- spec/input_faker.rb
|
218
|
-
- spec/shelly/app_spec.rb
|
219
|
-
- spec/shelly/cli/main_spec.rb
|
220
|
-
- spec/shelly/cli/runner_spec.rb
|
221
|
-
- spec/shelly/cli/user_spec.rb
|
222
|
-
- spec/shelly/client_spec.rb
|
223
|
-
- spec/shelly/cloudfile_spec.rb
|
224
|
-
- spec/shelly/model_spec.rb
|
225
|
-
- spec/shelly/user_spec.rb
|
226
|
-
- spec/spec_helper.rb
|
227
|
-
- spec/thor/options_spec.rb
|
242
|
+
test_files: []
|
243
|
+
|