Skip to content

Commit 77955dd

Browse files
committed
wip
1 parent 4e22a22 commit 77955dd

20 files changed

+68
-52
lines changed

app/access/space_quota_definition_access.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,7 @@ def delete?(space_quota_definition, _params=nil)
6868
def read?(space_quota_definition, *_)
6969
context.admin_override || (
7070
!context.user.nil? && (
71-
(context.user.managed_organizations.include? space_quota_definition.organization) ||
71+
context.user.managed_organizations_dataset.where(id: space_quota_definition.organization_id).any? ||
7272
!(context.user.managed_spaces & space_quota_definition.spaces).empty? ||
7373
!(context.user.audited_spaces & space_quota_definition.spaces).empty? ||
7474
!(context.user.spaces & space_quota_definition.spaces).empty?

app/actions/process_create.rb

+2-2
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,8 @@ def create(app, args)
2525
process = nil
2626
app.class.db.transaction do
2727
process = app.add_process(attrs)
28-
route_mappings = process.route_mappings
29-
process.update(ports: route_mappings.map(&:app_port)) unless route_mappings.empty?
28+
app_ports = process.route_mappings_dataset.select_map(:app_port)
29+
process.update(ports: app_ports) unless app_ports.empty?
3030
Repositories::ProcessEventRepository.record_create(process, @user_audit_info, manifest_triggered: @manifest_triggered)
3131
end
3232

app/actions/service_instance_share.rb

+2-2
Original file line numberDiff line numberDiff line change
@@ -54,12 +54,12 @@ def validate_plan_visibility!(service_instance, space)
5454
end
5555

5656
def validate_name_uniqueness!(service_instance, space)
57-
if space.service_instances.map(&:name).include?(service_instance.name)
57+
if space.service_instances_dataset.where(name: service_instance.name).any?
5858
error_msg = "A service instance called #{service_instance.name} already exists in #{space.name}."
5959
error!(error_msg)
6060
end
6161

62-
return unless space.service_instances_shared_from_other_spaces.map(&:name).include?(service_instance.name)
62+
return unless space.service_instances_shared_from_other_spaces_dataset.where(name: service_instance.name).any?
6363

6464
error_msg = "A service instance called #{service_instance.name} has already been shared with #{space.name}."
6565
error!(error_msg)

app/actions/v3/service_instance_delete.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -150,7 +150,7 @@ def remove_associations
150150

151151
def unshare_all_spaces
152152
# The array from `service_instance.shared_spaces` gets updated as spaces are unshared, so we make list of guids
153-
space_guids = service_instance.shared_spaces.map(&:guid)
153+
space_guids = service_instance.shared_spaces_dataset.select_map(:guid)
154154

155155
unshare_action = ServiceInstanceUnshare.new
156156
space_guids.each_with_object([]) do |space_guid, errors|

app/controllers/v3/roles_controller.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ def destroy
7575

7676
if role.type == VCAP::CloudController::RoleTypes::ORGANIZATION_USER
7777
org = Organization.find(id: role.organization_id)
78-
no_space_role = Role.where(space_id: org.spaces.map(&:id), user_id: role.user_id).empty?
78+
no_space_role = Role.where(space_id: org.spaces_dataset.select(:id), user_id: role.user_id).empty?
7979
unprocessable!('Cannot delete organization_user role while user has roles in spaces in that organization.') unless no_space_role
8080
end
8181
end

app/controllers/v3/security_groups_controller.rb

+2-2
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ def delete_running_spaces
123123
unprocessable_space! unless space
124124
unauthorized! unless permission_queryer.can_update_active_space?(space.id, space.organization_id)
125125
suspended! unless permission_queryer.is_space_active?(space.id)
126-
unprocessable_space! unless security_group.spaces.include?(space)
126+
unprocessable_space! unless security_group.spaces_dataset.where(id: space.id).any?
127127

128128
SecurityGroupUnapply.unapply_running(security_group, space)
129129

@@ -140,7 +140,7 @@ def delete_staging_spaces
140140
unprocessable_space! unless space
141141
unauthorized! unless permission_queryer.can_update_active_space?(space.id, space.organization_id)
142142
suspended! unless permission_queryer.is_space_active?(space.id)
143-
unprocessable_space! unless security_group.staging_spaces.include?(space)
143+
unprocessable_space! unless security_group.staging_spaces_dataset.where(id: space.id).any?
144144

145145
SecurityGroupUnapply.unapply_staging(security_group, space)
146146

app/decorators/field_service_instance_broker_decorator.rb

+11-4
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,18 @@ def decorate(hash, service_instances)
1616
managed_service_instances = service_instances.select(&:managed_instance?)
1717
return hash if managed_service_instances.empty?
1818

19-
hash[:included] ||= {}
20-
plans = managed_service_instances.map(&:service_plan).uniq
21-
brokers = plans.map(&:service_broker).uniq
19+
brokers = ServiceBroker.
20+
join(:services, service_broker_id: :service_brokers__id).
21+
join(:service_plans, service_id: :services__id).
22+
join(:service_instances, service_plan_id: :service_plans__id).
23+
where(service_instances__id: managed_service_instances.map(&:id)).
24+
distinct.
25+
order_by(:service_brokers__created_at).
26+
select(:service_brokers__name, :service_brokers__guid).
27+
all
2228

23-
hash[:included][:service_brokers] = brokers.sort_by(&:created_at).map do |broker|
29+
hash[:included] ||= {}
30+
hash[:included][:service_brokers] = brokers.map do |broker|
2431
broker_view = {}
2532
broker_view[:name] = broker.name if @fields.include?('name')
2633
broker_view[:guid] = broker.guid if @fields.include?('guid')

app/decorators/field_service_instance_offering_decorator.rb

+10-6
Original file line numberDiff line numberDiff line change
@@ -12,16 +12,21 @@ def initialize(fields)
1212
@fields = fields[:'service_plan.service_offering'].to_set.intersection(self.class.allowed)
1313
end
1414

15-
# rubocop:todo Metrics/CyclomaticComplexity
1615
def decorate(hash, service_instances)
1716
managed_service_instances = service_instances.select(&:managed_instance?)
1817
return hash if managed_service_instances.empty?
1918

20-
hash[:included] ||= {}
21-
plans = managed_service_instances.map(&:service_plan).uniq
22-
offerings = plans.map(&:service).uniq
19+
offerings = Service.
20+
join(:service_plans, service_id: :services__id).
21+
join(:service_instances, service_plan_id: :service_plans__id).
22+
where(service_instances__id: managed_service_instances.map(&:id)).
23+
distinct.
24+
order_by(:services__created_at).
25+
select(:services__label, :services__guid, :services__description, :services__tags, :services__extra, :services__service_broker_id).
26+
all
2327

24-
hash[:included][:service_offerings] = offerings.sort_by(&:created_at).map do |offering|
28+
hash[:included] ||= {}
29+
hash[:included][:service_offerings] = offerings.map do |offering|
2530
offering_view = {}
2631
offering_view[:name] = offering.name if @fields.include?('name')
2732
offering_view[:guid] = offering.guid if @fields.include?('guid')
@@ -43,7 +48,6 @@ def decorate(hash, service_instances)
4348

4449
hash
4550
end
46-
# rubocop:enable Metrics/CyclomaticComplexity
4751

4852
private
4953

app/fetchers/droplet_list_fetcher.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ def filter(message, app, space_guids, dataset)
4444
droplet_table_name = DropletModel.table_name
4545

4646
if message.requested?(:organization_guids)
47-
space_guids_from_orgs = Organization.where(guid: message.organization_guids).map(&:spaces).flatten.map(&:guid)
47+
space_guids_from_orgs = Spaces.join(:organizations, id: :organization_id).where(organization__guid: message.organization_guids).select(:guid)
4848
dataset = dataset.select_all(droplet_table_name).
4949
join_table(:inner, AppModel.table_name, { guid: Sequel[:droplets][:app_guid], space_guid: space_guids_from_orgs }, { table_alias: :apps_orgs })
5050
end

app/fetchers/route_fetcher.rb

+4-1
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,10 @@ def filter(message, dataset)
2727
dataset = dataset.where(port: message.ports) if message.requested?(:ports)
2828

2929
if message.requested?(:organization_guids)
30-
space_ids = Organization.where(guid: message.organization_guids).map(&:spaces).flatten.map(&:id)
30+
space_ids = Space.
31+
join(:organizations, id: :organization_id).
32+
where(organizations__guid: message.organization_guids).
33+
select(:spaces__id)
3134
dataset = dataset.where(space_id: space_ids)
3235
end
3336

app/fetchers/space_quota_list_fetcher.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ def filter(message, dataset, readable_space_quota_guids)
1818
dataset = dataset.where(name: message.names) if message.requested? :names
1919

2020
if message.requested? :organization_guids
21-
org_ids = Organization.where(guid: message.organization_guids).map(:id)
21+
org_ids = Organization.where(guid: message.organization_guids).select(:id)
2222
dataset = dataset.where(organization_id: org_ids)
2323
end
2424

app/fetchers/task_list_fetcher.rb

+2-1
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,8 @@ def filter(message)
3737
def filter_app_dataset(message, app_dataset)
3838
app_dataset = app_dataset.where(space_guid: message.space_guids) if message.requested?(:space_guids)
3939
if message.requested?(:organization_guids)
40-
app_dataset = app_dataset.where(space_guid: Organization.where(guid: message.organization_guids).map(&:spaces).flatten.map(&:guid))
40+
space_guids_from_orgs = Spaces.join(:organizations, id: :organization_id).where(organization__guid: message.organization_guids).select(:guid)
41+
app_dataset = app_dataset.where(space_guid: space_guids_from_orgs)
4142
end
4243
app_dataset = app_dataset.where(guid: message.app_guids) if message.requested?(:app_guids)
4344
app_dataset

app/models/runtime/organization.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -259,7 +259,7 @@ def billing_enabled?
259259
end
260260

261261
def isolation_segment_guids
262-
isolation_segment_models.map(&:guid)
262+
isolation_segment_models_dataset.select_map(:guid)
263263
end
264264

265265
def has_user?(user)

app/models/runtime/process_model.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -509,7 +509,7 @@ def stopped?
509509
end
510510

511511
def uris
512-
routes.map(&:uri)
512+
routes_dataset.select_map(:uri)
513513
end
514514

515515
def buildpack

app/models/runtime/user.rb

+4-2
Original file line numberDiff line numberDiff line change
@@ -82,13 +82,15 @@ def validate
8282
end
8383

8484
def validate_organization(org)
85-
return if org && organizations.include?(org)
85+
return if org && organizations_dataset.where(id: org.id).any?
8686

8787
raise InvalidOrganizationRelation.new("Cannot add role, user does not belong to Organization with guid #{org.guid}")
8888
end
8989

9090
def validate_organization_roles(org)
91-
return unless org && (managed_organizations.include?(org) || billing_managed_organizations.include?(org) || audited_organizations.include?(org))
91+
return unless org && (managed_organizations_dataset.where(id: org.id).any? ||
92+
billing_managed_organizations_dataset.where(id: org.id).any? ||
93+
audited_organizations_dataset.where(id: org.id).any?)
9294

9395
raise InvalidOrganizationRelation.new("Cannot remove user from Organization with guid #{org.guid} if the user has the OrgManager, BillingManager, or Auditor role")
9496
end

app/models/services/service.rb

+4-4
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,9 @@ class Service < Sequel::Model
2929

3030
class << self
3131
def public_visible
32-
public_active_plans = ServicePlan.where(active: true, public: true).all
33-
service_ids = public_active_plans.map(&:service_id).uniq
34-
dataset.filter(id: service_ids)
32+
public_active_plans = ServicePlan.where(active: true, public: true)
33+
34+
dataset.filter(id: public_active_plans.select(:service_id).distinct)
3535
end
3636

3737
def user_visibility_filter(current_user, operation=nil)
@@ -45,7 +45,7 @@ def user_visibility_for_read(current_user, _admin_override)
4545
end
4646

4747
def unauthenticated_visibility_filter
48-
{ id: public_visible.map(&:id) }
48+
{ id: public_visible.select(:id) }
4949
end
5050

5151
def space_or_org_visible_for_user(space, user)

app/models/services/service_broker.rb

+3-4
Original file line numberDiff line numberDiff line change
@@ -47,10 +47,9 @@ def space_scoped?
4747
end
4848

4949
def has_service_instances?
50-
VCAP::CloudController::ServiceInstance.
51-
join(:service_plans, id: :service_plan_id).
52-
join(:services, id: :service_id).
53-
where(services__service_broker_id: id).
50+
services_dataset.
51+
join(:service_plans, service_id: :services__id).
52+
join(:service_instances, service_plan_id: :service_plans__id).
5453
any?
5554
end
5655

app/presenters/v3/security_group_presenter.rb

+9-9
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,10 @@ def to_hash
2727
},
2828
relationships: {
2929
running_spaces: {
30-
data: space_guid_hash_for(security_group.spaces)
30+
data: space_guid_hash_for(security_group.spaces_dataset)
3131
},
3232
staging_spaces: {
33-
data: space_guid_hash_for(security_group.staging_spaces)
33+
data: space_guid_hash_for(security_group.staging_spaces_dataset)
3434
}
3535
},
3636
links: build_links
@@ -43,13 +43,13 @@ def security_group
4343
@resource
4444
end
4545

46-
def space_guid_hash_for(spaces)
47-
visible_spaces = if @all_spaces_visible
48-
spaces
49-
else
50-
spaces.select { |space| @visible_space_guids.include? space.guid }
51-
end
52-
visible_spaces.map { |space| { guid: space.guid } }
46+
def space_guid_hash_for(spaces_dataset)
47+
visible_spaces_dataset = if @all_spaces_visible
48+
spaces_dataset
49+
else
50+
spaces_dataset.where(guid: @visible_space_guids)
51+
end
52+
visible_spaces_dataset.select_map(:guid).map { |guid| { guid: guid } }
5353
end
5454

5555
def build_links

app/presenters/v3/space_quota_presenter.rb

+6-6
Original file line numberDiff line numberDiff line change
@@ -56,12 +56,12 @@ def space_quota
5656
end
5757

5858
def filtered_visible_spaces
59-
visible_spaces = if @all_spaces_visible
60-
space_quota.spaces
61-
else
62-
space_quota.spaces.select { |space| @visible_space_guids.include? space.guid }
63-
end
64-
visible_spaces.map { |space| { guid: space.guid } }
59+
visible_spaces_dataset = if @all_spaces_visible
60+
space_quota.spaces_dataset
61+
else
62+
space_quota.spaces_dataset.where(guid: @visible_space_guids)
63+
end
64+
visible_spaces_dataset.select_map(:guid).map { |guid| { guid: guid } }
6565
end
6666

6767
def build_links

lib/cloud_controller/permissions.rb

+2-2
Original file line numberDiff line numberDiff line change
@@ -239,8 +239,8 @@ def can_read_route?(space_id)
239239
space = VCAP::CloudController::Space.where(id: space_id).first
240240

241241
space.has_member?(@user) || space.has_supporter?(@user) ||
242-
@user.managed_organizations.map(&:id).include?(space.organization_id) ||
243-
@user.audited_organizations.map(&:id).include?(space.organization_id)
242+
@user.managed_organizations_dataset.where(id: space.organization_id).any? ||
243+
@user.audited_organizations_dataset.where(id: space.organization_id).any?
244244
end
245245

246246
def space_guids_with_readable_routes_query

0 commit comments

Comments
 (0)