cloudfoundry/cloud_controller_ng

View on GitHub
app/actions/space_update.rb

Summary

Maintainability
A
0 mins
Test Coverage
module VCAP::CloudController
  class SpaceUpdate
    class Error < ::StandardError
    end

    def initialize(user_audit_info)
      @user_audit_info = user_audit_info
    end

    def update(space, message)
      space.db.transaction do
        space.lock!
        space.name = message.name if message.requested?(:name)
        MetadataUpdate.update(space, message)

        space.save
        Repositories::SpaceEventRepository.new.record_space_update(space, @user_audit_info, message.audit_hash)
      end

      space
    rescue Sequel::ValidationFailed => e
      validation_error!(e, space)
    end

    def validation_error!(error, space)
      error!("Organization '#{space.organization.name}' already contains a space with name '#{space.name}'.") if error.is_a?(Space::DBNameUniqueRaceError) || error.errors.on(%i[
        organization_id name
      ])&.include?(:unique)
      error!(error.message)
    end

    def error!(message)
      raise Error.new(message)
    end
  end
end