cfoundry 2.2.0rc3 → 2.3.0
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/cfoundry/baseclient.rb +2 -0
- data/lib/cfoundry/v2/domain.rb +8 -0
- data/lib/cfoundry/v2/user.rb +54 -47
- data/lib/cfoundry/version.rb +1 -1
- data/spec/cfoundry/v2/domain_spec.rb +37 -0
- data/spec/cfoundry/v2/user_spec.rb +25 -0
- data/spec/factories/domains_factory.rb +4 -1
- data/spec/fixtures/fake_cc_application_summary.json +14 -4
- data/spec/fixtures/fake_cc_domain.json +1 -0
- data/spec/fixtures/fake_cc_organization_domains.json +1 -0
- metadata +7 -5
data/lib/cfoundry/baseclient.rb
CHANGED
@@ -134,6 +134,8 @@ module CFoundry
|
|
134
134
|
|
135
135
|
def handle_response(response, options, request)
|
136
136
|
if status_is_successful?(response[:status].to_i)
|
137
|
+
uaa.delete_user(options[:params][:user_delete]) if options[:params] && options[:params][:user_delete]
|
138
|
+
|
137
139
|
handle_successful_response(response, options)
|
138
140
|
else
|
139
141
|
handle_error_response(response, request)
|
data/lib/cfoundry/v2/domain.rb
CHANGED
@@ -2,11 +2,19 @@ require "cfoundry/v2/model"
|
|
2
2
|
|
3
3
|
module CFoundry::V2
|
4
4
|
class Domain < Model
|
5
|
+
validates_presence_of :name
|
6
|
+
validates_format_of :name, :with => /\A([^\.]+\.)+[^\.]+\Z/
|
7
|
+
validates_presence_of :owning_organization
|
8
|
+
|
5
9
|
attribute :name, :string
|
6
10
|
attribute :wildcard, :boolean
|
7
11
|
to_one :owning_organization, :as => :organization, :default => nil
|
8
12
|
to_many :spaces
|
9
13
|
|
10
14
|
queryable_by :name, :owning_organization_guid, :space_guid
|
15
|
+
|
16
|
+
def system?
|
17
|
+
guid.present? && !owning_organization.present?
|
18
|
+
end
|
11
19
|
end
|
12
20
|
end
|
data/lib/cfoundry/v2/user.rb
CHANGED
@@ -1,64 +1,71 @@
|
|
1
1
|
require "cfoundry/v2/model"
|
2
2
|
|
3
|
-
module CFoundry
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
3
|
+
module CFoundry
|
4
|
+
module V2
|
5
|
+
class User < Model
|
6
|
+
to_many :spaces
|
7
|
+
to_many :organizations
|
8
|
+
to_many :managed_organizations, :as => :organization
|
9
|
+
to_many :billing_managed_organizations, :as => :organization
|
10
|
+
to_many :audited_organizations, :as => :organization
|
11
|
+
to_many :managed_spaces, :as => :space
|
12
|
+
to_many :audited_spaces, :as => :space
|
13
|
+
attribute :admin, :boolean
|
14
|
+
to_one :default_space, :as => :space
|
14
15
|
|
15
|
-
|
16
|
+
attribute :guid, :string # guid is explicitly set for users
|
16
17
|
|
17
|
-
|
18
|
-
|
19
|
-
|
18
|
+
queryable_by :space_guid, :organization_guid, :managed_organization_guid,
|
19
|
+
:billing_managed_organization_guid, :audited_organization_guid,
|
20
|
+
:managed_space_guid, :audited_space_guid
|
20
21
|
|
21
|
-
|
22
|
-
|
23
|
-
|
22
|
+
def guid
|
23
|
+
@guid
|
24
|
+
end
|
24
25
|
|
25
|
-
|
26
|
+
alias set_guid_attribute guid=
|
26
27
|
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
28
|
+
def guid=(x)
|
29
|
+
@guid = x
|
30
|
+
set_guid_attribute(x)
|
31
|
+
end
|
31
32
|
|
32
|
-
|
33
|
+
alias :admin? :admin
|
33
34
|
|
34
|
-
|
35
|
-
|
36
|
-
|
35
|
+
def change_password!(new, old)
|
36
|
+
@client.base.uaa.change_password(@guid, new, old)
|
37
|
+
end
|
37
38
|
|
38
|
-
|
39
|
-
|
39
|
+
# optional metadata from UAA
|
40
|
+
attr_accessor :emails, :name
|
40
41
|
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
42
|
+
def email
|
43
|
+
return unless @emails && @emails.first
|
44
|
+
@emails.first[:value]
|
45
|
+
end
|
45
46
|
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
47
|
+
def given_name
|
48
|
+
return unless @name && @name[:givenName] != email
|
49
|
+
@name[:givenName]
|
50
|
+
end
|
50
51
|
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
52
|
+
def family_name
|
53
|
+
return unless @name && @name[:familyName] != email
|
54
|
+
@name[:familyName]
|
55
|
+
end
|
56
|
+
|
57
|
+
def full_name
|
58
|
+
if @name && @name[:fullName]
|
59
|
+
@name[:fullName]
|
60
|
+
elsif given_name && family_name
|
61
|
+
"#{given_name} #{family_name}"
|
62
|
+
end
|
63
|
+
end
|
55
64
|
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
elsif given_name && family_name
|
60
|
-
"#{given_name} #{family_name}"
|
65
|
+
def delete! (options = {})
|
66
|
+
options[:user_delete] = guid
|
67
|
+
super (options)
|
61
68
|
end
|
62
69
|
end
|
63
70
|
end
|
64
|
-
end
|
71
|
+
end
|
data/lib/cfoundry/version.rb
CHANGED
@@ -9,6 +9,43 @@ module CFoundry
|
|
9
9
|
it "should have a spaces association" do
|
10
10
|
expect(domain.spaces).to eq([space])
|
11
11
|
end
|
12
|
+
|
13
|
+
describe "validations" do
|
14
|
+
subject { build(:domain) }
|
15
|
+
it { should validate_presence_of(:name) }
|
16
|
+
it { should allow_value("run.pivotal.io").for(:name) }
|
17
|
+
it { should_not allow_value("not-a-url").for(:name) }
|
18
|
+
it { should validate_presence_of(:owning_organization) }
|
19
|
+
end
|
20
|
+
|
21
|
+
describe "#system?" do
|
22
|
+
let(:params) { {} }
|
23
|
+
let(:domain) { build(:domain, {:owning_organization => nil, client: client}.merge(params)) }
|
24
|
+
let(:client) { build(:client) }
|
25
|
+
|
26
|
+
context "when the domain is persisted and has no owning organization" do
|
27
|
+
it "returns true" do
|
28
|
+
expect(domain.system?).to be_true
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
context "when the domain is not persisted" do
|
33
|
+
let(:params) { {:guid => nil} }
|
34
|
+
|
35
|
+
it "returns false" do
|
36
|
+
expect(domain.system?).to be_false
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
context "when the domain has an owning org" do
|
41
|
+
let(:params) { {:owning_organization => org} }
|
42
|
+
let(:org) { build(:organization) }
|
43
|
+
|
44
|
+
it "returns false" do
|
45
|
+
expect(domain.system?).to be_false
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
12
49
|
end
|
13
50
|
end
|
14
51
|
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
module CFoundry
|
4
|
+
module V2
|
5
|
+
describe User do
|
6
|
+
let(:client) { build(:client) }
|
7
|
+
subject { build(:user, client: client) }
|
8
|
+
|
9
|
+
describe '#delete!' do
|
10
|
+
describe 'when cloud controller was able to delete the user' do
|
11
|
+
before do
|
12
|
+
stub_request(:delete, /v2\/users\/.*/).to_return(:status => 200, :body => "", :headers => {})
|
13
|
+
client.base.stub(:info).and_return({:authorization_endpoint => 'some_endpoint'})
|
14
|
+
end
|
15
|
+
|
16
|
+
it "also removes the user from uaa" do
|
17
|
+
CFoundry::UAAClient.any_instance.should_receive(:delete_user)
|
18
|
+
|
19
|
+
subject.delete!({})
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -1,7 +1,10 @@
|
|
1
1
|
FactoryGirl.define do
|
2
2
|
factory :domain, :class => CFoundry::V2::Domain do
|
3
3
|
sequence(:guid) { |n| "domain-guid-#{n}" }
|
4
|
+
ignore do
|
5
|
+
client build(:client)
|
6
|
+
end
|
4
7
|
|
5
|
-
initialize_with { new(guid,
|
8
|
+
initialize_with { new(guid, client) }
|
6
9
|
end
|
7
10
|
end
|
@@ -7,11 +7,21 @@
|
|
7
7
|
"routes":[
|
8
8
|
{ "guid": "route-id",
|
9
9
|
"host": "host",
|
10
|
-
"domain": {
|
10
|
+
"domain": {
|
11
|
+
"guid": "domain-id",
|
12
|
+
"name": "app-domain.com",
|
13
|
+
"owning_organization_guid": "organization-id",
|
14
|
+
"owning_organization_url": "/v2/organizations/organization-id"
|
15
|
+
}
|
11
16
|
},
|
12
17
|
{ "guid": "route-id-2",
|
13
18
|
"host": null,
|
14
|
-
"domain": {
|
19
|
+
"domain": {
|
20
|
+
"guid": "domain-id",
|
21
|
+
"name": "app-domain.com",
|
22
|
+
"owning_organization_guid": "organization-id",
|
23
|
+
"owning_organization_url": "/v2/organizations/organization-id"
|
24
|
+
}
|
15
25
|
},
|
16
26
|
{ "guid": "route-id-3",
|
17
27
|
"host": "host-3",
|
@@ -39,8 +49,8 @@
|
|
39
49
|
"file_descriptors":256,
|
40
50
|
"disk_quota":256,
|
41
51
|
"available_domains":[
|
42
|
-
{"guid":"domain-id", "name":"app-domain.com", "owning_organization_guid":"organization-id"},
|
43
|
-
{"guid":"domain-id-2", "name":"app-domain-2.com", "owning_organization_guid":"organization-id"},
|
52
|
+
{"guid":"domain-id", "name":"app-domain.com", "owning_organization_guid":"organization-id", "owning_organization_url": "/v2/organizations/organization-id"},
|
53
|
+
{"guid":"domain-id-2", "name":"app-domain-2.com", "owning_organization_guid":"organization-id", "owning_organization_url": "/v2/organizations/organization-id"},
|
44
54
|
{"guid":"domain-id-3", "name":"vcap.me", "owning_organization_guid":null}
|
45
55
|
]
|
46
56
|
}
|
metadata
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cfoundry
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
5
|
-
prerelease:
|
4
|
+
version: 2.3.0
|
5
|
+
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Cloud Foundry Team
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2013-
|
13
|
+
date: 2013-07-01 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: activemodel
|
@@ -337,6 +337,7 @@ files:
|
|
337
337
|
- spec/cfoundry/v2/quota_definition_spec.rb
|
338
338
|
- spec/cfoundry/v2/route_spec.rb
|
339
339
|
- spec/cfoundry/v2/space_spec.rb
|
340
|
+
- spec/cfoundry/v2/user_spec.rb
|
340
341
|
- spec/cfoundry/validator_spec.rb
|
341
342
|
- spec/factories/app_events_factory.rb
|
342
343
|
- spec/factories/apps_factory.rb
|
@@ -414,9 +415,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
414
415
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
415
416
|
none: false
|
416
417
|
requirements:
|
417
|
-
- - ! '
|
418
|
+
- - ! '>='
|
418
419
|
- !ruby/object:Gem::Version
|
419
|
-
version:
|
420
|
+
version: '0'
|
420
421
|
requirements: []
|
421
422
|
rubyforge_project: cfoundry
|
422
423
|
rubygems_version: 1.8.25
|
@@ -459,6 +460,7 @@ test_files:
|
|
459
460
|
- spec/cfoundry/v2/quota_definition_spec.rb
|
460
461
|
- spec/cfoundry/v2/route_spec.rb
|
461
462
|
- spec/cfoundry/v2/space_spec.rb
|
463
|
+
- spec/cfoundry/v2/user_spec.rb
|
462
464
|
- spec/cfoundry/validator_spec.rb
|
463
465
|
- spec/factories/app_events_factory.rb
|
464
466
|
- spec/factories/apps_factory.rb
|