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

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