vmc 0.5.0.beta.7 → 0.5.0.beta.10

Sign up to get free protection for your applications and to get access to all the features.
Files changed (59) hide show
  1. data/LICENSE +1277 -746
  2. data/Rakefile +22 -23
  3. data/lib/vmc/cli.rb +21 -27
  4. data/lib/vmc/cli/app/push.rb +1 -0
  5. data/lib/vmc/cli/app/push/create.rb +3 -2
  6. data/lib/vmc/cli/app/push/sync.rb +11 -8
  7. data/lib/vmc/cli/app/scale.rb +19 -17
  8. data/lib/vmc/cli/domain/map.rb +55 -0
  9. data/lib/vmc/cli/domain/unmap.rb +56 -0
  10. data/lib/vmc/cli/route/map.rb +74 -0
  11. data/lib/vmc/cli/route/unmap.rb +94 -0
  12. data/lib/vmc/cli/service/create.rb +4 -1
  13. data/lib/vmc/cli/start/base.rb +2 -2
  14. data/lib/vmc/cli/start/login.rb +5 -2
  15. data/lib/vmc/cli/start/target.rb +4 -3
  16. data/lib/vmc/cli/user/base.rb +19 -0
  17. data/lib/vmc/cli/user/passwd.rb +7 -19
  18. data/lib/vmc/cli/{start → user}/register.rb +12 -23
  19. data/lib/vmc/constants.rb +1 -1
  20. data/lib/vmc/test_support.rb +4 -0
  21. data/lib/vmc/test_support/command_helper.rb +38 -0
  22. data/{spec/support → lib/vmc/test_support}/common_input_examples.rb +0 -0
  23. data/lib/vmc/test_support/fake_home_dir.rb +16 -0
  24. data/lib/vmc/test_support/interact_helper.rb +29 -0
  25. data/lib/vmc/version.rb +1 -1
  26. data/spec/features/new_user_flow_spec.rb +43 -51
  27. data/spec/spec_helper.rb +24 -12
  28. data/spec/vmc/cli/app/instances_spec.rb +3 -8
  29. data/spec/vmc/cli/app/push/create_spec.rb +10 -7
  30. data/spec/vmc/cli/app/push_spec.rb +1 -1
  31. data/spec/vmc/cli/app/rename_spec.rb +1 -1
  32. data/spec/vmc/cli/app/scale_spec.rb +81 -0
  33. data/spec/vmc/cli/app/stats_spec.rb +3 -7
  34. data/spec/vmc/cli/domain/map_spec.rb +140 -0
  35. data/spec/vmc/cli/domain/unmap_spec.rb +73 -0
  36. data/spec/vmc/cli/organization/orgs_spec.rb +13 -16
  37. data/spec/vmc/cli/organization/rename_spec.rb +1 -1
  38. data/spec/vmc/cli/route/map_spec.rb +142 -0
  39. data/spec/vmc/cli/route/unmap_spec.rb +215 -0
  40. data/spec/vmc/cli/service/rename_spec.rb +1 -1
  41. data/spec/vmc/cli/space/rename_spec.rb +15 -18
  42. data/spec/vmc/cli/space/spaces_spec.rb +18 -25
  43. data/spec/vmc/cli/start/info_spec.rb +44 -46
  44. data/spec/vmc/cli/start/login_spec.rb +40 -0
  45. data/spec/vmc/cli/user/create_spec.rb +54 -0
  46. data/spec/vmc/cli/user/passwd_spec.rb +7 -14
  47. data/spec/vmc/cli/{start → user}/register_spec.rb +26 -22
  48. data/spec/vmc/cli_spec.rb +164 -6
  49. metadata +46 -39
  50. data/lib/vmc/cli/app/routes.rb +0 -100
  51. data/lib/vmc/cli/domain/add_domain.rb +0 -25
  52. data/lib/vmc/cli/domain/create_domain.rb +0 -28
  53. data/lib/vmc/cli/domain/delete_domain.rb +0 -56
  54. data/lib/vmc/cli/domain/remove_domain.rb +0 -28
  55. data/lib/vmc/cli/route/create_route.rb +0 -49
  56. data/lib/vmc/cli/route/delete.rb +0 -47
  57. data/spec/support/feature_helpers.rb +0 -16
  58. data/spec/support/interact_helpers.rb +0 -27
  59. data/spec/vmc/cli/route/delete_route_spec.rb +0 -162
@@ -2,19 +2,20 @@ require 'spec_helper'
2
2
 
3
3
  describe VMC::CLI do
4
4
  let(:cmd) { Class.new(VMC::CLI).new }
5
+ let(:cli) { VMC::CLI.new }
5
6
 
6
7
  describe '#execute' do
7
8
  let(:inputs) { {} }
8
9
 
9
10
  subject do
10
- with_output_to do
11
+ capture_output do
11
12
  stub(cmd).input { inputs }
12
13
  cmd.execute(nil, [])
13
14
  end
14
15
  end
15
16
 
16
17
  it 'wraps Timeout::Error with a more friendly message' do
17
- stub(cmd).precondition { raise CFoundry::Timeout.new(Net::HTTP::Get, "/foo") }
18
+ stub(cmd).precondition { raise CFoundry::Timeout.new("GET", "/foo") }
18
19
 
19
20
  mock(cmd).err 'GET /foo timed out'
20
21
  subject
@@ -42,7 +43,7 @@ describe VMC::CLI do
42
43
  describe '#log_error' do
43
44
  subject do
44
45
  cmd.log_error(exception)
45
- File.read(VMC::CRASH_FILE)
46
+ File.read(File.expand_path(VMC::CRASH_FILE))
46
47
  end
47
48
 
48
49
  context 'when the exception is a normal error' do
@@ -60,10 +61,10 @@ describe VMC::CLI do
60
61
  end
61
62
 
62
63
  context 'when the exception is an APIError' do
63
- let(:request) { Net::HTTP::Get.new("http://api.cloudfoundry.com/foo") }
64
- let(:response) { Net::HTTPNotFound.new("foo", 404, "bar")}
64
+ let(:request) { { :method => "GET", :url => "http://api.cloudfoundry.com/foo", :headers => {}, :body => nil } }
65
+ let(:response) { { :status => 404, :body => "bar", :headers => {} } }
65
66
  let(:exception) do
66
- error = CFoundry::APIError.new(request, response)
67
+ error = CFoundry::APIError.new(nil, nil, request, response)
67
68
  error.set_backtrace(["fo/gems/bar", "baz quick"])
68
69
  error
69
70
  end
@@ -76,5 +77,162 @@ describe VMC::CLI do
76
77
  it { should include "RESPONSE: " }
77
78
  end
78
79
  end
80
+
81
+ describe "#client_target" do
82
+ subject { cli.client_target }
83
+
84
+ context "when a ~/.vmc/target exists" do
85
+ use_fake_home_dir { "#{SPEC_ROOT}/fixtures/fake_home_dirs/new" }
86
+
87
+ it "returns the target in that file" do
88
+ expect(subject).to eq "https://api.some-domain.com"
89
+ end
90
+ end
91
+
92
+ context "when a ~/.vmc_target exists" do
93
+ use_fake_home_dir { "#{SPEC_ROOT}/fixtures/fake_home_dirs/old" }
94
+
95
+ it "returns the target in that file" do
96
+ expect(subject).to eq "https://api.some-domain.com"
97
+ end
98
+ end
99
+
100
+ context "when no target file exists" do
101
+ use_fake_home_dir { "#{SPEC_ROOT}/fixtures/fake_home_dirs/no_config" }
102
+
103
+ it "displays an error to the user" do
104
+ expect{ subject }.to raise_error(VMC::UserError, /Please select a target/)
105
+ end
106
+ end
107
+ end
108
+
109
+ describe "#targets_info" do
110
+ subject { cli.targets_info }
111
+
112
+ context "when a ~/.vmc/tokens.yml exists" do
113
+ use_fake_home_dir { "#{SPEC_ROOT}/fixtures/fake_home_dirs/new" }
114
+
115
+ it "returns the file's contents as a hash" do
116
+ expect(subject).to eq({
117
+ "https://api.some-domain.com" => {
118
+ :token => "bearer some-token",
119
+ :version => 2
120
+ }
121
+ })
122
+ end
123
+ end
124
+
125
+ context "when a ~/.vmc_token file exists" do
126
+ use_fake_home_dir { "#{SPEC_ROOT}/fixtures/fake_home_dirs/old" }
127
+
128
+ it "returns the target in that file" do
129
+ expect(subject).to eq({
130
+ "https://api.some-domain.com" => {
131
+ :token => "bearer some-token"
132
+ }
133
+ })
134
+ end
135
+ end
136
+
137
+ context "when no token file exists" do
138
+ use_fake_home_dir { "#{SPEC_ROOT}/fixtures/fake_home_dirs/no_config" }
139
+
140
+ it "returns an empty hash" do
141
+ expect(subject).to eq({})
142
+ end
143
+ end
144
+ end
145
+
146
+ describe "#target_info" do
147
+ subject { VMC::CLI.new.target_info("https://api.some-domain.com") }
148
+
149
+ context "when a ~/.vmc/tokens.yml exists" do
150
+ use_fake_home_dir { "#{SPEC_ROOT}/fixtures/fake_home_dirs/new" }
151
+
152
+ it "returns the info for the given url" do
153
+ expect(subject).to eq({
154
+ :token => "bearer some-token",
155
+ :version => 2
156
+ })
157
+ end
158
+ end
159
+
160
+ context "when a ~/.vmc_token file exists" do
161
+ use_fake_home_dir { "#{SPEC_ROOT}/fixtures/fake_home_dirs/old" }
162
+
163
+ it "returns the info for the given url" do
164
+ expect(subject).to eq({
165
+ :token => "bearer some-token"
166
+ })
167
+ end
168
+ end
169
+
170
+ context "when no token file exists" do
171
+ use_fake_home_dir { "#{SPEC_ROOT}/fixtures/fake_home_dirs/no_config" }
172
+
173
+ it "returns an empty hash" do
174
+ expect(subject).to eq({})
175
+ end
176
+ end
177
+ end
178
+
179
+ describe "methods that update the token info" do
180
+ let!(:tmpdir) { Dir.mktmpdir }
181
+ use_fake_home_dir { tmpdir }
182
+
183
+ before do
184
+ stub(cli).targets_info do
185
+ {
186
+ "https://api.some-domain.com" => { :token => "bearer token1" },
187
+ "https://api.some-other-domain.com" => { :token => "bearer token2" }
188
+ }
189
+ end
190
+ end
191
+
192
+ after { FileUtils.rm_rf tmpdir }
193
+
194
+ describe "#save_target_info" do
195
+ it "adds the given target info, and writes the result to ~/.vmc/tokens.yml" do
196
+ cli.save_target_info({ :token => "bearer token3" }, "https://api.some-domain.com")
197
+ YAML.load_file(File.expand_path("~/.vmc/tokens.yml")).should == {
198
+ "https://api.some-domain.com" => { :token => "bearer token3" },
199
+ "https://api.some-other-domain.com" => { :token => "bearer token2" }
200
+ }
201
+ end
202
+ end
203
+
204
+ describe "#remove_target_info" do
205
+ it "removes the given target, and writes the result to ~/.vmc/tokens.yml" do
206
+ cli.remove_target_info("https://api.some-domain.com")
207
+ YAML.load_file(File.expand_path("~/.vmc/tokens.yml")).should == {
208
+ "https://api.some-other-domain.com" => { :token => "bearer token2" }
209
+ }
210
+ end
211
+ end
212
+ end
213
+
214
+ describe "#client" do
215
+ use_fake_home_dir { "#{SPEC_ROOT}/fixtures/fake_home_dirs/new" }
216
+ before { stub(cli).input { {} } }
217
+
218
+ describe "the client's token" do
219
+ it "constructs an AuthToken object with the data from the tokens.yml file" do
220
+ expect(cli.client.token).to be_a(CFoundry::AuthToken)
221
+ expect(cli.client.token.auth_header).to eq("bearer some-token")
222
+ end
223
+
224
+ it "does not assign an AuthToken on the client if there is no token stored" do
225
+ mock(cli).target_info("some-fake-target") { { :version => 2 } }
226
+ expect(cli.client("some-fake-target").token).to be_nil
227
+ end
228
+ end
229
+
230
+ describe "the client's version" do
231
+ it "uses the version stored in the yml file" do
232
+
233
+ expect(cli.client.version).to eq(2)
234
+ end
235
+ end
236
+ end
79
237
  end
80
238
 
metadata CHANGED
@@ -1,23 +1,24 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: vmc
3
3
  version: !ruby/object:Gem::Version
4
- hash: 1416830649
4
+ hash: -3788488616
5
5
  prerelease: 6
6
6
  segments:
7
7
  - 0
8
8
  - 5
9
9
  - 0
10
10
  - beta
11
- - 7
12
- version: 0.5.0.beta.7
11
+ - 10
12
+ version: 0.5.0.beta.10
13
13
  platform: ruby
14
14
  authors:
15
+ - Cloud Foundry Team
15
16
  - Alex Suraci
16
17
  autorequire:
17
18
  bindir: bin
18
19
  cert_chain: []
19
20
 
20
- date: 2013-01-10 00:00:00 Z
21
+ date: 2013-02-05 00:00:00 Z
21
22
  dependencies:
22
23
  - !ruby/object:Gem::Dependency
23
24
  version_requirements: &id001 !ruby/object:Gem::Requirement
@@ -71,12 +72,12 @@ dependencies:
71
72
  requirements:
72
73
  - - ~>
73
74
  - !ruby/object:Gem::Version
74
- hash: 41
75
+ hash: 39
75
76
  segments:
76
77
  - 0
77
78
  - 4
78
- - 19
79
- version: 0.4.19
79
+ - 20
80
+ version: 0.4.20
80
81
  prerelease: false
81
82
  type: :runtime
82
83
  name: cfoundry
@@ -103,12 +104,12 @@ dependencies:
103
104
  requirements:
104
105
  - - ~>
105
106
  - !ruby/object:Gem::Version
106
- hash: 15
107
+ hash: 11
107
108
  segments:
108
109
  - 0
109
- - 4
110
+ - 5
110
111
  - 0
111
- version: 0.4.0
112
+ version: 0.5.0
112
113
  prerelease: false
113
114
  type: :runtime
114
115
  name: mothership
@@ -119,12 +120,12 @@ dependencies:
119
120
  requirements:
120
121
  - - ~>
121
122
  - !ruby/object:Gem::Version
122
- hash: 41
123
+ hash: 11
123
124
  segments:
124
125
  - 0
125
- - 4
126
- - 19
127
- version: 0.4.19
126
+ - 5
127
+ - 0
128
+ version: 0.5.0
128
129
  prerelease: false
129
130
  type: :runtime
130
131
  name: manifests-vmc-plugin
@@ -135,15 +136,15 @@ dependencies:
135
136
  requirements:
136
137
  - - ~>
137
138
  - !ruby/object:Gem::Version
138
- hash: 27
139
+ hash: 13
139
140
  segments:
140
141
  - 0
141
- - 0
142
- - 2
143
- version: 0.0.2
142
+ - 1
143
+ - 11
144
+ version: 0.1.11
144
145
  prerelease: false
145
146
  type: :runtime
146
- name: tunnel-dummy-vmc-plugin
147
+ name: tunnel-vmc-plugin
147
148
  requirement: *id008
148
149
  - !ruby/object:Gem::Dependency
149
150
  version_requirements: &id009 !ruby/object:Gem::Requirement
@@ -207,7 +208,7 @@ dependencies:
207
208
  requirement: *id012
208
209
  description:
209
210
  email:
210
- - asuraci@vmware.com
211
+ - vcap-dev@googlegroups.com
211
212
  executables:
212
213
  - vmc
213
214
  extensions: []
@@ -234,17 +235,14 @@ files:
234
235
  - lib/vmc/cli/app/push.rb
235
236
  - lib/vmc/cli/app/rename.rb
236
237
  - lib/vmc/cli/app/restart.rb
237
- - lib/vmc/cli/app/routes.rb
238
238
  - lib/vmc/cli/app/scale.rb
239
239
  - lib/vmc/cli/app/start.rb
240
240
  - lib/vmc/cli/app/stats.rb
241
241
  - lib/vmc/cli/app/stop.rb
242
- - lib/vmc/cli/domain/add_domain.rb
243
242
  - lib/vmc/cli/domain/base.rb
244
- - lib/vmc/cli/domain/create_domain.rb
245
- - lib/vmc/cli/domain/delete_domain.rb
246
243
  - lib/vmc/cli/domain/domains.rb
247
- - lib/vmc/cli/domain/remove_domain.rb
244
+ - lib/vmc/cli/domain/map.rb
245
+ - lib/vmc/cli/domain/unmap.rb
248
246
  - lib/vmc/cli/help.rb
249
247
  - lib/vmc/cli/interactive.rb
250
248
  - lib/vmc/cli/organization/base.rb
@@ -254,9 +252,9 @@ files:
254
252
  - lib/vmc/cli/organization/orgs.rb
255
253
  - lib/vmc/cli/organization/rename.rb
256
254
  - lib/vmc/cli/route/base.rb
257
- - lib/vmc/cli/route/create_route.rb
258
- - lib/vmc/cli/route/delete.rb
255
+ - lib/vmc/cli/route/map.rb
259
256
  - lib/vmc/cli/route/routes.rb
257
+ - lib/vmc/cli/route/unmap.rb
260
258
  - lib/vmc/cli/service/base.rb
261
259
  - lib/vmc/cli/service/bind.rb
262
260
  - lib/vmc/cli/service/create.rb
@@ -277,7 +275,6 @@ files:
277
275
  - lib/vmc/cli/start/info.rb
278
276
  - lib/vmc/cli/start/login.rb
279
277
  - lib/vmc/cli/start/logout.rb
280
- - lib/vmc/cli/start/register.rb
281
278
  - lib/vmc/cli/start/target.rb
282
279
  - lib/vmc/cli/start/target_interactions.rb
283
280
  - lib/vmc/cli/start/targets.rb
@@ -285,6 +282,7 @@ files:
285
282
  - lib/vmc/cli/user/create.rb
286
283
  - lib/vmc/cli/user/delete.rb
287
284
  - lib/vmc/cli/user/passwd.rb
285
+ - lib/vmc/cli/user/register.rb
288
286
  - lib/vmc/cli/user/users.rb
289
287
  - lib/vmc/cli.rb
290
288
  - lib/vmc/constants.rb
@@ -293,25 +291,31 @@ files:
293
291
  - lib/vmc/plugin.rb
294
292
  - lib/vmc/spacing.rb
295
293
  - lib/vmc/spec_helper.rb
294
+ - lib/vmc/test_support/command_helper.rb
295
+ - lib/vmc/test_support/common_input_examples.rb
296
+ - lib/vmc/test_support/fake_home_dir.rb
297
+ - lib/vmc/test_support/interact_helper.rb
298
+ - lib/vmc/test_support.rb
296
299
  - lib/vmc/version.rb
297
300
  - lib/vmc.rb
298
301
  - spec/assets/hello-sinatra/Gemfile
299
302
  - spec/assets/hello-sinatra/main.rb
300
303
  - spec/features/new_user_flow_spec.rb
301
304
  - spec/spec_helper.rb
302
- - spec/support/common_input_examples.rb
303
- - spec/support/feature_helpers.rb
304
- - spec/support/interact_helpers.rb
305
305
  - spec/vmc/cli/app/base_spec.rb
306
306
  - spec/vmc/cli/app/delete_spec.rb
307
307
  - spec/vmc/cli/app/instances_spec.rb
308
308
  - spec/vmc/cli/app/push/create_spec.rb
309
309
  - spec/vmc/cli/app/push_spec.rb
310
310
  - spec/vmc/cli/app/rename_spec.rb
311
+ - spec/vmc/cli/app/scale_spec.rb
311
312
  - spec/vmc/cli/app/stats_spec.rb
313
+ - spec/vmc/cli/domain/map_spec.rb
314
+ - spec/vmc/cli/domain/unmap_spec.rb
312
315
  - spec/vmc/cli/organization/orgs_spec.rb
313
316
  - spec/vmc/cli/organization/rename_spec.rb
314
- - spec/vmc/cli/route/delete_route_spec.rb
317
+ - spec/vmc/cli/route/map_spec.rb
318
+ - spec/vmc/cli/route/unmap_spec.rb
315
319
  - spec/vmc/cli/service/bind_spec.rb
316
320
  - spec/vmc/cli/service/delete_spec.rb
317
321
  - spec/vmc/cli/service/rename_spec.rb
@@ -321,12 +325,13 @@ files:
321
325
  - spec/vmc/cli/space/spaces_spec.rb
322
326
  - spec/vmc/cli/start/info_spec.rb
323
327
  - spec/vmc/cli/start/login_spec.rb
324
- - spec/vmc/cli/start/register_spec.rb
328
+ - spec/vmc/cli/user/create_spec.rb
325
329
  - spec/vmc/cli/user/passwd_spec.rb
330
+ - spec/vmc/cli/user/register_spec.rb
326
331
  - spec/vmc/cli_spec.rb
327
332
  - spec/vmc/detect_spec.rb
328
333
  - bin/vmc
329
- homepage: http://cloudfoundry.com/
334
+ homepage: http://github.com/cloudfoundry/vmc
330
335
  licenses: []
331
336
 
332
337
  post_install_message:
@@ -366,19 +371,20 @@ test_files:
366
371
  - spec/assets/hello-sinatra/main.rb
367
372
  - spec/features/new_user_flow_spec.rb
368
373
  - spec/spec_helper.rb
369
- - spec/support/common_input_examples.rb
370
- - spec/support/feature_helpers.rb
371
- - spec/support/interact_helpers.rb
372
374
  - spec/vmc/cli/app/base_spec.rb
373
375
  - spec/vmc/cli/app/delete_spec.rb
374
376
  - spec/vmc/cli/app/instances_spec.rb
375
377
  - spec/vmc/cli/app/push/create_spec.rb
376
378
  - spec/vmc/cli/app/push_spec.rb
377
379
  - spec/vmc/cli/app/rename_spec.rb
380
+ - spec/vmc/cli/app/scale_spec.rb
378
381
  - spec/vmc/cli/app/stats_spec.rb
382
+ - spec/vmc/cli/domain/map_spec.rb
383
+ - spec/vmc/cli/domain/unmap_spec.rb
379
384
  - spec/vmc/cli/organization/orgs_spec.rb
380
385
  - spec/vmc/cli/organization/rename_spec.rb
381
- - spec/vmc/cli/route/delete_route_spec.rb
386
+ - spec/vmc/cli/route/map_spec.rb
387
+ - spec/vmc/cli/route/unmap_spec.rb
382
388
  - spec/vmc/cli/service/bind_spec.rb
383
389
  - spec/vmc/cli/service/delete_spec.rb
384
390
  - spec/vmc/cli/service/rename_spec.rb
@@ -388,7 +394,8 @@ test_files:
388
394
  - spec/vmc/cli/space/spaces_spec.rb
389
395
  - spec/vmc/cli/start/info_spec.rb
390
396
  - spec/vmc/cli/start/login_spec.rb
391
- - spec/vmc/cli/start/register_spec.rb
397
+ - spec/vmc/cli/user/create_spec.rb
392
398
  - spec/vmc/cli/user/passwd_spec.rb
399
+ - spec/vmc/cli/user/register_spec.rb
393
400
  - spec/vmc/cli_spec.rb
394
401
  - spec/vmc/detect_spec.rb
@@ -1,100 +0,0 @@
1
- require "vmc/cli/app/base"
2
-
3
- # TODO: split up, as the URL interaction will differ (see other TODO)
4
- module VMC::App
5
- class Routes < Base
6
- desc "Add a URL mapping for an app"
7
- group :apps, :info, :hidden => true
8
- input :app, :desc => "Application to add the URL to", :argument => true,
9
- :from_given => by_name(:app)
10
- input :url, :desc => "URL to map to the application", :argument => true
11
- # TODO: move push's URL interaction here, and have it just invoke
12
- def map
13
- app = input[:app]
14
-
15
- simple = input[:url].sub(/^https?:\/\/(.*)\/?/i, '\1')
16
-
17
- if v2?
18
- host, domain_name = simple.split(".", 2)
19
-
20
- domain =
21
- client.current_space.domain_by_name(domain_name, :depth => 0)
22
-
23
- fail "Invalid domain '#{domain_name}'" unless domain
24
-
25
- route = client.routes_by_host(host, :depth => 0).find do |r|
26
- r.domain == domain
27
- end
28
-
29
- unless route
30
- route = client.route
31
-
32
- with_progress("Creating route #{c(simple, :name)}") do
33
- route.host = host
34
- route.domain = domain
35
- route.space = app.space
36
- route.create!
37
- end
38
- end
39
-
40
- with_progress("Binding #{c(simple, :name)} to #{c(app.name, :name)}") do
41
- app.add_route(route)
42
- end
43
- else
44
- with_progress("Updating #{c(app.name, :name)}") do
45
- app.urls << simple
46
- app.update!
47
- end
48
- end
49
- end
50
-
51
-
52
- desc "Remove a URL mapping from an app"
53
- group :apps, :info, :hidden => true
54
- input :app, :desc => "Application to remove the URL from",
55
- :argument => true, :from_given => by_name(:app)
56
- input :url, :desc => "URL to unmap", :argument => :optional
57
- def unmap
58
- app = input[:app]
59
- url = input[:url, app.urls]
60
-
61
- simple = url.sub(/^https?:\/\/(.*)\/?/i, '\1')
62
-
63
- if v2?
64
- host, domain_name = simple.split(".", 2)
65
-
66
- domain =
67
- client.current_space.domain_by_name(domain_name, :depth => 0)
68
-
69
- fail "Invalid domain '#{domain_name}'" unless domain
70
-
71
- route = app.routes_by_host(host, :depth => 0).find do |r|
72
- r.domain == domain
73
- end
74
-
75
- fail "Invalid route '#{simple}'" unless route
76
-
77
- with_progress("Removing route #{c(simple, :name)}") do
78
- app.remove_route(route)
79
- end
80
- else
81
- with_progress("Updating #{c(app.name, :name)}") do |s|
82
- unless app.urls.delete(simple)
83
- s.fail do
84
- err "URL #{url} is not mapped to this application."
85
- return
86
- end
87
- end
88
-
89
- app.update!
90
- end
91
- end
92
- end
93
-
94
- private
95
-
96
- def ask_url(choices)
97
- ask("Which URL?", :choices => choices)
98
- end
99
- end
100
- end