shelly 0.0.39 → 0.0.40

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/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