Skip to content
This repository was archived by the owner on Jun 2, 2021. It is now read-only.

Commit c67d024

Browse files
tcdowneycwlbraa
andcommitted
add space,space.organization includes to /v3/routes
Client can now include spaces and organizations inline on GET /v3/routes and GET /v3/routes/:guid endpoints [#174502491](https://www.pivotaltracker.com/story/show/174502491) Co-authored-by: Tim Downey <tdowney@vmware.com> Co-authored-by: Connor Braa <cbraa@pivotal.io>
1 parent 36d4e31 commit c67d024

15 files changed

Lines changed: 97 additions & 28 deletions

app/controllers/v3/apps_controller.rb

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,8 @@
1010
require 'actions/app_start'
1111
require 'actions/app_stop'
1212
require 'actions/app_assign_droplet'
13-
require 'decorators/include_app_space_decorator'
14-
require 'decorators/include_app_organization_decorator'
13+
require 'decorators/include_space_decorator'
14+
require 'decorators/include_organization_decorator'
1515
require 'decorators/include_space_organization_decorator'
1616
require 'messages/apps_list_message'
1717
require 'messages/app_show_message'
@@ -46,8 +46,8 @@ def index
4646
end
4747

4848
decorators = []
49-
decorators << IncludeAppSpaceDecorator if IncludeAppSpaceDecorator.match?(message.include)
50-
decorators << IncludeAppOrganizationDecorator if IncludeAppOrganizationDecorator.match?(message.include)
49+
decorators << IncludeSpaceDecorator if IncludeSpaceDecorator.match?(message.include)
50+
decorators << IncludeOrganizationDecorator if IncludeOrganizationDecorator.match?(message.include)
5151

5252
render status: :ok,
5353
json: Presenters::V3::PaginatedListPresenter.new(
@@ -69,8 +69,8 @@ def show
6969
app_not_found! unless app && permission_queryer.can_read_from_space?(space.guid, org.guid)
7070

7171
decorators = []
72-
decorators << IncludeAppSpaceDecorator if IncludeAppSpaceDecorator.match?(message.include)
73-
decorators << IncludeAppOrganizationDecorator if IncludeAppOrganizationDecorator.match?(message.include)
72+
decorators << IncludeSpaceDecorator if IncludeSpaceDecorator.match?(message.include)
73+
decorators << IncludeOrganizationDecorator if IncludeOrganizationDecorator.match?(message.include)
7474

7575
render status: :ok, json: Presenters::V3::AppPresenter.new(
7676
app,

app/controllers/v3/routes_controller.rb

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@ def index
2929

3030
decorators = []
3131
decorators << IncludeRouteDomainDecorator if IncludeRouteDomainDecorator.match?(message.include)
32+
decorators << IncludeSpaceDecorator if IncludeSpaceDecorator.match?(message.include)
33+
decorators << IncludeOrganizationDecorator if IncludeOrganizationDecorator.match?(message.include)
3234

3335
render status: :ok, json: Presenters::V3::PaginatedListPresenter.new(
3436
presenter: Presenters::V3::RoutePresenter,
@@ -48,6 +50,8 @@ def show
4850

4951
decorators = []
5052
decorators << IncludeRouteDomainDecorator if IncludeRouteDomainDecorator.match?(message.include)
53+
decorators << IncludeSpaceDecorator if IncludeSpaceDecorator.match?(message.include)
54+
decorators << IncludeOrganizationDecorator if IncludeOrganizationDecorator.match?(message.include)
5155

5256
render status: :ok, json: Presenters::V3::RoutePresenter.new(
5357
route,

app/decorators/include_app_organization_decorator.rb renamed to app/decorators/include_organization_decorator.rb

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
module VCAP::CloudController
2-
class IncludeAppOrganizationDecorator
2+
class IncludeOrganizationDecorator
33
class << self
44
def match?(include)
55
include&.any? { |i| %w(org space.organization).include?(i) }
66
end
77

8-
def decorate(hash, apps)
8+
def decorate(hash, resources)
99
hash[:included] ||= {}
10-
organization_guids = apps.map(&:organization_guid).uniq
10+
organization_guids = resources.map(&:organization_guid).uniq
1111
organizations = Organization.where(guid: organization_guids).order(:created_at)
1212

1313
hash[:included][:organizations] = organizations.map { |organization| Presenters::V3::OrganizationPresenter.new(organization).to_hash }

app/decorators/include_role_organization_decorator.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ module VCAP::CloudController
22
class IncludeRoleOrganizationDecorator
33
class << self
44
def match?(include_params)
5+
# roles may be associated with an org without being associated with a space
6+
# this is why this is not `space.organization`
57
include_params&.include?('organization')
68
end
79

app/decorators/include_app_space_decorator.rb renamed to app/decorators/include_space_decorator.rb

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
module VCAP::CloudController
2-
class IncludeAppSpaceDecorator
2+
class IncludeSpaceDecorator
33
class << self
44
def match?(include)
55
include&.any? { |i| %w(space space.organization).include?(i) }
66
end
77

8-
def decorate(hash, apps)
8+
def decorate(hash, resources)
99
hash[:included] ||= {}
10-
space_guids = apps.map(&:space_guid).uniq
10+
space_guids = resources.map(&:space_guid).uniq
1111
spaces = Space.where(guid: space_guids)
1212

1313
hash[:included][:spaces] = spaces.map { |space| Presenters::V3::SpacePresenter.new(space).to_hash }

app/messages/route_show_message.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ class RouteShowMessage < BaseMessage
55
register_allowed_keys [:guid, :include]
66

77
validates_with NoAdditionalParamsValidator
8-
validates_with IncludeParamValidator, valid_values: ['domain']
8+
validates_with IncludeParamValidator, valid_values: ['domain', 'space', 'space.organization']
99

1010
validates :guid, presence: true, string: true
1111

app/messages/routes_list_message.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ class RoutesListMessage < ListMessage
1515
]
1616

1717
validates_with NoAdditionalParamsValidator
18-
validates_with IncludeParamValidator, valid_values: ['domain']
18+
validates_with IncludeParamValidator, valid_values: ['domain', 'space', 'space.organization']
1919

2020
validates :hosts, allow_nil: true, array: true
2121
validates :paths, allow_nil: true, array: true

docs/v3/source/includes/concepts/_includes.md.erb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@ Resource | Allowed values
1616
**apps/[:guid]** | `space.organization`, `space`
1717
**roles** | `user`, `space`, `organization`
1818
**roles/[:guid]** | `user`, `space`, `organization`
19-
**routes** | `domain`
20-
**routes/[:guid]** | `domain`
19+
**routes** | `domain`, `space.organization`, `space`
20+
**routes/[:guid]** | `domain`, `space.organization`, `space`
2121
**service_plans** | `space.organization`, `service_offering`
2222
**service_plans/[:guid]** | `space.organization`, `service_offering`
2323
**spaces** | `organization`

docs/v3/source/includes/resources/routes/_get.md.erb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ Content-Type: application/json
2828

2929
Name | Type | Description
3030
---- | ---- | ------------
31-
**include** (*experimental*)| _string_ | Optionally include additional related resources in the response <br>Valid value is `domain`
31+
**include** (*experimental*)| _string_ | Optionally include additional related resources in the response <br>Valid values are `domain`, `space.organization`, `space`
3232

3333
#### Permitted roles
3434

docs/v3/source/includes/resources/routes/_list.md.erb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ Name | Type | Description
4141
**per_page** | _integer_ | Number of results per page; <br>valid values are 1 through 5000
4242
**order_by** | _string_ | Value to sort by. Defaults to ascending; prepend with `-` to sort descending. <br>Valid values are `created_at`, `updated_at`
4343
**label_selector** (*experimental*)| _string_ | A query string containing a list of [label selector](#labels-and-selectors) requirements
44-
**include** (*experimental*)| _string_ | Optionally include a list of unique related resources in the response <br>Valid value is `domain`
44+
**include** (*experimental*)| _string_ | Optionally include a list of unique related resources in the response <br>Valid values are `domain`, `space.organization`, `space`
4545

4646
#### Permitted roles
4747
|

0 commit comments

Comments
 (0)