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 CHANGED
@@ -12,7 +12,7 @@
12
12
 
13
13
  ## Running tests
14
14
 
15
- rake spec
15
+ bundle exec rake
16
16
 
17
17
  or
18
18
 
@@ -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)
@@ -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
@@ -82,6 +82,12 @@ module Shelly
82
82
  end
83
83
  end
84
84
 
85
+ def apps_ips(apps)
86
+ apps.map do |app|
87
+ get("/apps/#{app}/ips")
88
+ end
89
+ end
90
+
85
91
  def post(path, params = {})
86
92
  request(path, :post, params)
87
93
  end
@@ -46,6 +46,13 @@ module Shelly
46
46
  result
47
47
  end
48
48
  end
49
+
50
+ def fetch_ips
51
+ response = shelly.apps_ips(clouds)
52
+ response.each do |result|
53
+ result
54
+ end
55
+ end
49
56
  end
50
57
  end
51
58
 
@@ -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
 
@@ -1,3 +1,3 @@
1
1
  module Shelly
2
- VERSION = "0.0.26"
2
+ VERSION = "0.0.27"
3
3
  end
@@ -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
- version: 0.0.26
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
- date: 2011-12-01 00:00:00.000000000Z
13
- dependencies:
14
- - !ruby/object:Gem::Dependency
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
- version_requirements: *2156723600
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
- version: '0'
33
- type: :development
34
- prerelease: false
35
- version_requirements: *2156723140
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
- version_requirements: *2156722620
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
- version: '0'
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
- version_requirements: *2156722100
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
- version: '0'
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
- version_requirements: *2156721580
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
- version: '0'
67
+ requirements:
68
+ - - ">="
69
+ - !ruby/object:Gem::Version
70
+ hash: 3
71
+ segments:
72
+ - 0
73
+ version: "0"
77
74
  type: :development
78
- prerelease: false
79
- version_requirements: *2156721160
80
- - !ruby/object:Gem::Dependency
75
+ version_requirements: *id004
76
+ - !ruby/object:Gem::Dependency
81
77
  name: fakefs
82
- requirement: &2156720740 !ruby/object:Gem::Requirement
78
+ prerelease: false
79
+ requirement: &id005 !ruby/object:Gem::Requirement
83
80
  none: false
84
- requirements:
85
- - - ! '>='
86
- - !ruby/object:Gem::Version
87
- version: '0'
81
+ requirements:
82
+ - - ">="
83
+ - !ruby/object:Gem::Version
84
+ hash: 3
85
+ segments:
86
+ - 0
87
+ version: "0"
88
88
  type: :development
89
- prerelease: false
90
- version_requirements: *2156720740
91
- - !ruby/object:Gem::Dependency
89
+ version_requirements: *id005
90
+ - !ruby/object:Gem::Dependency
92
91
  name: fakeweb
93
- requirement: &2156720060 !ruby/object:Gem::Requirement
92
+ prerelease: false
93
+ requirement: &id006 !ruby/object:Gem::Requirement
94
94
  none: false
95
- requirements:
96
- - - ! '>='
97
- - !ruby/object:Gem::Version
98
- version: '0'
95
+ requirements:
96
+ - - ">="
97
+ - !ruby/object:Gem::Version
98
+ hash: 3
99
+ segments:
100
+ - 0
101
+ version: "0"
99
102
  type: :development
100
- prerelease: false
101
- version_requirements: *2156720060
102
- - !ruby/object:Gem::Dependency
103
+ version_requirements: *id006
104
+ - !ruby/object:Gem::Dependency
103
105
  name: wijet-thor
104
- requirement: &2156719300 !ruby/object:Gem::Requirement
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
- prerelease: false
112
- version_requirements: *2156719300
113
- - !ruby/object:Gem::Dependency
119
+ version_requirements: *id007
120
+ - !ruby/object:Gem::Dependency
114
121
  name: rest-client
115
- requirement: &2156718880 !ruby/object:Gem::Requirement
122
+ prerelease: false
123
+ requirement: &id008 !ruby/object:Gem::Requirement
116
124
  none: false
117
- requirements:
118
- - - ! '>='
119
- - !ruby/object:Gem::Version
120
- version: '0'
125
+ requirements:
126
+ - - ">="
127
+ - !ruby/object:Gem::Version
128
+ hash: 3
129
+ segments:
130
+ - 0
131
+ version: "0"
121
132
  type: :runtime
122
- prerelease: false
123
- version_requirements: *2156718880
124
- - !ruby/object:Gem::Dependency
133
+ version_requirements: *id008
134
+ - !ruby/object:Gem::Dependency
125
135
  name: json
126
- requirement: &2156718420 !ruby/object:Gem::Requirement
136
+ prerelease: false
137
+ requirement: &id009 !ruby/object:Gem::Requirement
127
138
  none: false
128
- requirements:
129
- - - ! '>='
130
- - !ruby/object:Gem::Version
131
- version: '0'
139
+ requirements:
140
+ - - ">="
141
+ - !ruby/object:Gem::Version
142
+ hash: 3
143
+ segments:
144
+ - 0
145
+ version: "0"
132
146
  type: :runtime
133
- prerelease: false
134
- version_requirements: *2156718420
135
- - !ruby/object:Gem::Dependency
147
+ version_requirements: *id009
148
+ - !ruby/object:Gem::Dependency
136
149
  name: wijet-launchy
137
- requirement: &2156717980 !ruby/object:Gem::Requirement
150
+ prerelease: false
151
+ requirement: &id010 !ruby/object:Gem::Requirement
138
152
  none: false
139
- requirements:
140
- - - ! '>='
141
- - !ruby/object:Gem::Version
142
- version: '0'
153
+ requirements:
154
+ - - ">="
155
+ - !ruby/object:Gem::Version
156
+ hash: 3
157
+ segments:
158
+ - 0
159
+ version: "0"
143
160
  type: :runtime
144
- prerelease: false
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
- files:
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
- require_paths:
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
- version: '0'
203
- required_rubygems_version: !ruby/object:Gem::Requirement
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
- version: '0'
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
- - spec/helpers.rb
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
+