shelly 0.0.39 → 0.0.40

Sign up to get free protection for your applications and to get access to all the features.
data/lib/shelly/app.rb CHANGED
@@ -1,13 +1,14 @@
1
1
  require 'erb'
2
2
  require 'launchy'
3
- require "shelly/backup"
4
3
 
5
4
  module Shelly
6
5
  class App < Model
7
6
  DATABASE_KINDS = %w(postgresql mongodb redis none)
8
7
 
9
8
  attr_accessor :code_name, :databases, :ruby_version, :environment,
10
- :git_url, :domains, :web_server_ip, :mail_server_ip
9
+ :git_url, :domains
10
+
11
+ autoload :Backup, "shelly/backup"
11
12
 
12
13
  def initialize(code_name = nil)
13
14
  self.code_name = code_name
@@ -98,6 +99,10 @@ module Shelly
98
99
  File.basename(Dir.pwd)
99
100
  end
100
101
 
102
+ def ips
103
+ shelly.app_ips(code_name)
104
+ end
105
+
101
106
  def users
102
107
  shelly.app_users(code_name)
103
108
  end
@@ -130,18 +135,6 @@ module Shelly
130
135
  shelly.app_delete_config(code_name, path)
131
136
  end
132
137
 
133
- def attributes
134
- @attributes ||= shelly.app(code_name)
135
- end
136
-
137
- def web_server_ip
138
- attributes["web_server_ip"]
139
- end
140
-
141
- def mail_server_ip
142
- attributes["mail_server_ip"]
143
- end
144
-
145
138
  def open_billing_page
146
139
  url = "#{shelly.shellyapp_url}/login?api_key=#{current_user.token}&return_to=/apps/#{code_name}/edit_billing"
147
140
  Launchy.open(url)
@@ -143,14 +143,14 @@ module Shelly
143
143
 
144
144
  desc "ip", "Lists clouds IP's"
145
145
  def ip
146
- say_error "No Cloudfile found" unless Cloudfile.present?
147
146
  @cloudfile = Cloudfile.new
148
147
  @cloudfile.clouds.each do |cloud|
149
148
  begin
150
149
  @app = App.new(cloud)
151
150
  say "Cloud #{cloud}:", :green
152
- print_wrapped "Web server IP: #{@app.web_server_ip}", :ident => 2
153
- print_wrapped "Mail server IP: #{@app.mail_server_ip}", :ident => 2
151
+ ips = @app.ips
152
+ print_wrapped "Web server IP: #{ips['web_server_ip']}", :ident => 2
153
+ print_wrapped "Mail server IP: #{ips['mail_server_ip']}", :ident => 2
154
154
  rescue Client::APIError => e
155
155
  if e.unauthorized?
156
156
  say_error "You have no access to '#{cloud}' cloud defined in Cloudfile", :with_exit => false
data/lib/shelly/client.rb CHANGED
@@ -115,10 +115,6 @@ module Shelly
115
115
  def apps
116
116
  get("/apps")
117
117
  end
118
-
119
- def app(code_name)
120
- get("/apps/#{code_name}")
121
- end
122
118
 
123
119
  def deploy_logs(cloud)
124
120
  get("/apps/#{cloud}/deploys")
@@ -152,6 +148,10 @@ module Shelly
152
148
  get("/apps/#{cloud}/users")
153
149
  end
154
150
 
151
+ def app_ips(cloud)
152
+ get("/apps/#{cloud}/ips")
153
+ end
154
+
155
155
  def post(path, params = {})
156
156
  request(path, :post, params)
157
157
  end
@@ -1,3 +1,3 @@
1
1
  module Shelly
2
- VERSION = "0.0.39"
2
+ VERSION = "0.0.40"
3
3
  end
data/lib/thor/thor.rb CHANGED
@@ -6,7 +6,7 @@ class Thor
6
6
  end
7
7
 
8
8
  def send(*args)
9
- if args.first == :dispatch
9
+ if args.first == :dispatch && !args[2].empty?
10
10
  running_task = args[2].first
11
11
  @hook.each do |method, options|
12
12
  if options[:only].include?(running_task.to_sym)
@@ -24,6 +24,13 @@ describe Shelly::App do
24
24
  end
25
25
  end
26
26
 
27
+ describe "#ips" do
28
+ it "should get app's ips" do
29
+ @client.should_receive(:app_ips).with("foo-staging")
30
+ @app.ips
31
+ end
32
+ end
33
+
27
34
  describe "#add_git_remote" do
28
35
  before do
29
36
  @app.stub(:git_url).and_return("git@git.shellycloud.com:foo-staging.git")
@@ -57,30 +64,6 @@ describe Shelly::App do
57
64
  @app.shelly_generated_configs
58
65
  end
59
66
  end
60
-
61
- describe "#attributes" do
62
- before do
63
- @response = {"web_server_ip" => "192.0.2.1", "mail_server_ip" => "192.0.2.3"}
64
- @client.stub(:app).and_return(@response)
65
- end
66
-
67
- it "should fetch app attributes from API and cache them" do
68
- @client.should_receive(:app).with("foo-staging").exactly(:once).and_return(@response)
69
- 2.times { @app.attributes }
70
- end
71
-
72
- describe "#web_server_ip" do
73
- it "should return web server ip address" do
74
- @app.web_server_ip.should == "192.0.2.1"
75
- end
76
- end
77
-
78
- describe "#mail_server_ip" do
79
- it "should return mail server ip address" do
80
- @app.mail_server_ip.should == "192.0.2.3"
81
- end
82
- end
83
- end
84
67
 
85
68
  describe "#generate_cloudfile" do
86
69
  it "should return generated cloudfile" do
@@ -673,6 +673,14 @@ OUT
673
673
  Shelly::App.stub(:inside_git_repository?).and_return(true)
674
674
  end
675
675
 
676
+ it "should exit with message if command run outside git repository" do
677
+ Shelly::App.stub(:inside_git_repository?).and_return(false)
678
+ $stdout.should_receive(:puts).with("\e[31mMust be run inside your project git repository\e[0m")
679
+ lambda {
680
+ invoke(@main, :ip)
681
+ }.should raise_error(SystemExit)
682
+ end
683
+
676
684
  it "should exit with message if there is no Cloudfile" do
677
685
  File.delete("Cloudfile")
678
686
  $stdout.should_receive(:puts).with("\e[31mNo Cloudfile found\e[0m")
@@ -683,7 +691,7 @@ OUT
683
691
 
684
692
  context "on success" do
685
693
  it "should display mail and web server ip's" do
686
- @client.stub(:app).and_return(response)
694
+ @client.stub(:app_ips).and_return(response)
687
695
  $stdout.should_receive(:puts).with("\e[32mCloud foo-production:\e[0m")
688
696
  $stdout.should_receive(:puts).with(" Web server IP: 22.22.22.22")
689
697
  $stdout.should_receive(:puts).with(" Mail server IP: 11.11.11.11")
@@ -696,10 +704,16 @@ OUT
696
704
  end
697
705
 
698
706
  context "on failure" do
707
+ it "should raise an error if user is not in git repository" do
708
+ Shelly::App.stub(:inside_git_repository?).and_return(false)
709
+ $stdout.should_receive(:puts).with("\e[31mMust be run inside your project git repository\e[0m")
710
+ lambda { invoke(@main, :ip) }.should raise_error(SystemExit)
711
+ end
712
+
699
713
  it "should raise an error if user does not have access to cloud" do
700
714
  response = {"message" => "Cloud foo-staging not found"}
701
715
  exception = Shelly::Client::APIError.new(response.to_json, 404)
702
- @client.stub(:app).and_raise(exception)
716
+ @client.stub(:app_ips).and_raise(exception)
703
717
  $stdout.should_receive(:puts).with(red "You have no access to 'foo-staging' cloud defined in Cloudfile")
704
718
  invoke(@main, :ip)
705
719
  end
@@ -167,13 +167,12 @@ describe Shelly::Client do
167
167
  response.should == [{"email" => "test@example.com"}, {"email" => "test2@example.com"}]
168
168
  end
169
169
  end
170
-
171
- describe "#app" do
172
- it "should fetch app from API" do
173
- FakeWeb.register_uri(:get, api_url("apps/staging-foo"),
174
- :body => {:web_server_ip => "192.0.2.1", :mail_server_ip => "192.0.2.3"}.to_json)
175
- response = @client.app("staging-foo")
176
- response.should == {"web_server_ip" => "192.0.2.1", "mail_server_ip" => "192.0.2.3"}
170
+
171
+ describe "#app_ips" do
172
+ it "should send get request with app code_name" do
173
+ FakeWeb.register_uri(:get, api_url("apps/staging-foo/ips"), :body => {:mail_server_ip => "10.0.1.1", :web_server_ip => "88.198.21.187"}.to_json)
174
+ response = @client.app_ips("staging-foo")
175
+ response.should == {"mail_server_ip" => "10.0.1.1", "web_server_ip" => "88.198.21.187"}
177
176
  end
178
177
  end
179
178
 
metadata CHANGED
@@ -1,217 +1,167 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: shelly
3
- version: !ruby/object:Gem::Version
4
- hash: 81
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.40
5
5
  prerelease:
6
- segments:
7
- - 0
8
- - 0
9
- - 39
10
- version: 0.0.39
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - Shelly Cloud team
14
9
  autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
-
18
- date: 2011-12-30 00:00:00 +01:00
19
- default_executable:
20
- dependencies:
21
- - !ruby/object:Gem::Dependency
12
+ date: 2011-12-30 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
22
15
  name: rspec
16
+ requirement: &70136906680620 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
23
22
  type: :development
24
23
  prerelease: false
25
- version_requirements: &id001 !ruby/object:Gem::Requirement
26
- none: false
27
- requirements:
28
- - - ">="
29
- - !ruby/object:Gem::Version
30
- hash: 3
31
- segments:
32
- - 0
33
- version: "0"
34
- requirement: *id001
35
- - !ruby/object:Gem::Dependency
24
+ version_requirements: *70136906680620
25
+ - !ruby/object:Gem::Dependency
36
26
  name: rake
27
+ requirement: &70136906696580 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
37
33
  type: :development
38
34
  prerelease: false
39
- version_requirements: &id002 !ruby/object:Gem::Requirement
40
- none: false
41
- requirements:
42
- - - ">="
43
- - !ruby/object:Gem::Version
44
- hash: 3
45
- segments:
46
- - 0
47
- version: "0"
48
- requirement: *id002
49
- - !ruby/object:Gem::Dependency
35
+ version_requirements: *70136906696580
36
+ - !ruby/object:Gem::Dependency
50
37
  name: guard
38
+ requirement: &70136906696160 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
51
44
  type: :development
52
45
  prerelease: false
53
- version_requirements: &id003 !ruby/object:Gem::Requirement
54
- none: false
55
- requirements:
56
- - - ">="
57
- - !ruby/object:Gem::Version
58
- hash: 3
59
- segments:
60
- - 0
61
- version: "0"
62
- requirement: *id003
63
- - !ruby/object:Gem::Dependency
46
+ version_requirements: *70136906696160
47
+ - !ruby/object:Gem::Dependency
64
48
  name: guard-rspec
49
+ requirement: &70136906695740 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
65
55
  type: :development
66
56
  prerelease: false
67
- version_requirements: &id004 !ruby/object:Gem::Requirement
68
- none: false
69
- requirements:
70
- - - ">="
71
- - !ruby/object:Gem::Version
72
- hash: 3
73
- segments:
74
- - 0
75
- version: "0"
76
- requirement: *id004
77
- - !ruby/object:Gem::Dependency
57
+ version_requirements: *70136906695740
58
+ - !ruby/object:Gem::Dependency
78
59
  name: growl_notify
60
+ requirement: &70136906695280 !ruby/object:Gem::Requirement
61
+ none: false
62
+ requirements:
63
+ - - ! '>='
64
+ - !ruby/object:Gem::Version
65
+ version: '0'
79
66
  type: :development
80
67
  prerelease: false
81
- version_requirements: &id005 !ruby/object:Gem::Requirement
82
- none: false
83
- requirements:
84
- - - ">="
85
- - !ruby/object:Gem::Version
86
- hash: 3
87
- segments:
88
- - 0
89
- version: "0"
90
- requirement: *id005
91
- - !ruby/object:Gem::Dependency
68
+ version_requirements: *70136906695280
69
+ - !ruby/object:Gem::Dependency
92
70
  name: rb-fsevent
71
+ requirement: &70136906694860 !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ! '>='
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
93
77
  type: :development
94
78
  prerelease: false
95
- version_requirements: &id006 !ruby/object:Gem::Requirement
96
- none: false
97
- requirements:
98
- - - ">="
99
- - !ruby/object:Gem::Version
100
- hash: 3
101
- segments:
102
- - 0
103
- version: "0"
104
- requirement: *id006
105
- - !ruby/object:Gem::Dependency
79
+ version_requirements: *70136906694860
80
+ - !ruby/object:Gem::Dependency
106
81
  name: fakefs
82
+ requirement: &70136906694440 !ruby/object:Gem::Requirement
83
+ none: false
84
+ requirements:
85
+ - - ! '>='
86
+ - !ruby/object:Gem::Version
87
+ version: '0'
107
88
  type: :development
108
89
  prerelease: false
109
- version_requirements: &id007 !ruby/object:Gem::Requirement
110
- none: false
111
- requirements:
112
- - - ">="
113
- - !ruby/object:Gem::Version
114
- hash: 3
115
- segments:
116
- - 0
117
- version: "0"
118
- requirement: *id007
119
- - !ruby/object:Gem::Dependency
90
+ version_requirements: *70136906694440
91
+ - !ruby/object:Gem::Dependency
120
92
  name: fakeweb
93
+ requirement: &70136906694020 !ruby/object:Gem::Requirement
94
+ none: false
95
+ requirements:
96
+ - - ! '>='
97
+ - !ruby/object:Gem::Version
98
+ version: '0'
121
99
  type: :development
122
100
  prerelease: false
123
- version_requirements: &id008 !ruby/object:Gem::Requirement
124
- none: false
125
- requirements:
126
- - - ">="
127
- - !ruby/object:Gem::Version
128
- hash: 3
129
- segments:
130
- - 0
131
- version: "0"
132
- requirement: *id008
133
- - !ruby/object:Gem::Dependency
101
+ version_requirements: *70136906694020
102
+ - !ruby/object:Gem::Dependency
134
103
  name: wijet-thor
135
- type: :runtime
136
- prerelease: false
137
- version_requirements: &id009 !ruby/object:Gem::Requirement
104
+ requirement: &70136906693520 !ruby/object:Gem::Requirement
138
105
  none: false
139
- requirements:
106
+ requirements:
140
107
  - - ~>
141
- - !ruby/object:Gem::Version
142
- hash: 41
143
- segments:
144
- - 0
145
- - 14
146
- - 7
108
+ - !ruby/object:Gem::Version
147
109
  version: 0.14.7
148
- requirement: *id009
149
- - !ruby/object:Gem::Dependency
150
- name: rest-client
151
110
  type: :runtime
152
111
  prerelease: false
153
- version_requirements: &id010 !ruby/object:Gem::Requirement
112
+ version_requirements: *70136906693520
113
+ - !ruby/object:Gem::Dependency
114
+ name: rest-client
115
+ requirement: &70136906693100 !ruby/object:Gem::Requirement
154
116
  none: false
155
- requirements:
156
- - - ">="
157
- - !ruby/object:Gem::Version
158
- hash: 3
159
- segments:
160
- - 0
161
- version: "0"
162
- requirement: *id010
163
- - !ruby/object:Gem::Dependency
164
- name: json
117
+ requirements:
118
+ - - ! '>='
119
+ - !ruby/object:Gem::Version
120
+ version: '0'
165
121
  type: :runtime
166
122
  prerelease: false
167
- version_requirements: &id011 !ruby/object:Gem::Requirement
123
+ version_requirements: *70136906693100
124
+ - !ruby/object:Gem::Dependency
125
+ name: json
126
+ requirement: &70136906692640 !ruby/object:Gem::Requirement
168
127
  none: false
169
- requirements:
170
- - - ">="
171
- - !ruby/object:Gem::Version
172
- hash: 3
173
- segments:
174
- - 0
175
- version: "0"
176
- requirement: *id011
177
- - !ruby/object:Gem::Dependency
178
- name: wijet-launchy
128
+ requirements:
129
+ - - ! '>='
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
179
132
  type: :runtime
180
133
  prerelease: false
181
- version_requirements: &id012 !ruby/object:Gem::Requirement
134
+ version_requirements: *70136906692640
135
+ - !ruby/object:Gem::Dependency
136
+ name: wijet-launchy
137
+ requirement: &70136906692220 !ruby/object:Gem::Requirement
182
138
  none: false
183
- requirements:
184
- - - ">="
185
- - !ruby/object:Gem::Version
186
- hash: 3
187
- segments:
188
- - 0
189
- version: "0"
190
- requirement: *id012
191
- - !ruby/object:Gem::Dependency
192
- name: progressbar
139
+ requirements:
140
+ - - ! '>='
141
+ - !ruby/object:Gem::Version
142
+ version: '0'
193
143
  type: :runtime
194
144
  prerelease: false
195
- version_requirements: &id013 !ruby/object:Gem::Requirement
145
+ version_requirements: *70136906692220
146
+ - !ruby/object:Gem::Dependency
147
+ name: progressbar
148
+ requirement: &70136906691800 !ruby/object:Gem::Requirement
196
149
  none: false
197
- requirements:
198
- - - ">="
199
- - !ruby/object:Gem::Version
200
- hash: 3
201
- segments:
202
- - 0
203
- version: "0"
204
- requirement: *id013
150
+ requirements:
151
+ - - ! '>='
152
+ - !ruby/object:Gem::Version
153
+ version: '0'
154
+ type: :runtime
155
+ prerelease: false
156
+ version_requirements: *70136906691800
205
157
  description: Tool for managing applications and clouds at shellycloud.com
206
- email:
158
+ email:
207
159
  - support@shellycloud.com
208
- executables:
160
+ executables:
209
161
  - shelly
210
162
  extensions: []
211
-
212
163
  extra_rdoc_files: []
213
-
214
- files:
164
+ files:
215
165
  - .gitignore
216
166
  - .travis.yml
217
167
  - Gemfile
@@ -261,41 +211,37 @@ files:
261
211
  - spec/shelly/user_spec.rb
262
212
  - spec/spec_helper.rb
263
213
  - spec/thor/options_spec.rb
264
- has_rdoc: true
265
214
  homepage: http://shellycloud.com
266
215
  licenses: []
267
-
268
216
  post_install_message:
269
217
  rdoc_options: []
270
-
271
- require_paths:
218
+ require_paths:
272
219
  - lib
273
- required_ruby_version: !ruby/object:Gem::Requirement
220
+ required_ruby_version: !ruby/object:Gem::Requirement
274
221
  none: false
275
- requirements:
276
- - - ">="
277
- - !ruby/object:Gem::Version
278
- hash: 3
279
- segments:
222
+ requirements:
223
+ - - ! '>='
224
+ - !ruby/object:Gem::Version
225
+ version: '0'
226
+ segments:
280
227
  - 0
281
- version: "0"
282
- required_rubygems_version: !ruby/object:Gem::Requirement
228
+ hash: 2595737964624093032
229
+ required_rubygems_version: !ruby/object:Gem::Requirement
283
230
  none: false
284
- requirements:
285
- - - ">="
286
- - !ruby/object:Gem::Version
287
- hash: 3
288
- segments:
231
+ requirements:
232
+ - - ! '>='
233
+ - !ruby/object:Gem::Version
234
+ version: '0'
235
+ segments:
289
236
  - 0
290
- version: "0"
237
+ hash: 2595737964624093032
291
238
  requirements: []
292
-
293
239
  rubyforge_project: shelly
294
- rubygems_version: 1.6.2
240
+ rubygems_version: 1.8.11
295
241
  signing_key:
296
242
  specification_version: 3
297
243
  summary: Shelly Cloud command line tool
298
- test_files:
244
+ test_files:
299
245
  - spec/helpers.rb
300
246
  - spec/input_faker.rb
301
247
  - spec/shelly/app_spec.rb