From 1bbf311c10d4b42e5198a051e4389806574a2033 Mon Sep 17 00:00:00 2001 From: Eugene Petrenko Date: Mon, 5 Dec 2016 11:56:59 +0100 Subject: [PATCH] fix failing tests in project-extensions --- .../dsl/generating/DSL.Generating.Project.kt | 13 +++++++- .../jonnyzzz/teamcity/dsl/api/DSL.Project.kt | 32 +++++++++++++++++++ 2 files changed, 44 insertions(+), 1 deletion(-) diff --git a/src/generating-kotlin/src/main/kotlin/org/jonnyzzz/teamcity/dsl/generating/DSL.Generating.Project.kt b/src/generating-kotlin/src/main/kotlin/org/jonnyzzz/teamcity/dsl/generating/DSL.Generating.Project.kt index d3f0307..7abadce 100644 --- a/src/generating-kotlin/src/main/kotlin/org/jonnyzzz/teamcity/dsl/generating/DSL.Generating.Project.kt +++ b/src/generating-kotlin/src/main/kotlin/org/jonnyzzz/teamcity/dsl/generating/DSL.Generating.Project.kt @@ -6,7 +6,6 @@ import org.jonnyzzz.teamcity.dsl.model.TCProject import org.jonnyzzz.teamcity.dsl.model.isEmpty import org.jonnyzzz.teamcity.dsl.writeUTF import java.io.File -import kotlin.collections.forEach val TCProject.className: String get() = "Project_" + id @@ -68,6 +67,18 @@ fun generateProject(context: GenerationContext, home: File, project: TCProject) } } + val extensions = project.projectExtensions + if (extensions != null) { + block("extensions") { + extensions.extensions?.forEach { ext -> + + block("extension(${ext.id?.quote()}, ${ext.type?.quote()})") { + params(ext.parameters) + } + } + } + } + generateOrdering(context, project) } diff --git a/src/model-dsl/src/main/kotlin/org/jonnyzzz/teamcity/dsl/api/DSL.Project.kt b/src/model-dsl/src/main/kotlin/org/jonnyzzz/teamcity/dsl/api/DSL.Project.kt index 2e1dc2c..e5e4a30 100644 --- a/src/model-dsl/src/main/kotlin/org/jonnyzzz/teamcity/dsl/api/DSL.Project.kt +++ b/src/model-dsl/src/main/kotlin/org/jonnyzzz/teamcity/dsl/api/DSL.Project.kt @@ -3,6 +3,7 @@ package org.jonnyzzz.teamcity.dsl.api import org.jonnyzzz.teamcity.dsl.api.internal.DSLRegistry import org.jonnyzzz.teamcity.dsl.model.* import org.jonnyzzz.teamcity.dsl.setIfNull +import kotlin.comparisons.compareBy interface TCProjectOrderingBuilder { operator fun TCProjectRef.unaryPlus() @@ -96,3 +97,34 @@ fun TCProjectRef.project(id : String, builder : TCProject.() -> Unit = {}) : TCP } } } + +interface TCProjectExtensionBuilder { + fun param(name : String, value : String? = null, builder: TCParameterBuilder.() -> Unit = {}) + +} + +interface TCProjectExtensionsBuilder { + fun extension(id : String, type : String, builder : TCProjectExtensionBuilder.() -> Unit) +} + +fun TCProject.extensions(builder : TCProjectExtensionsBuilder.() -> Unit) { + val host = TCProjectExtensions() + projectExtensions = host + + object : TCProjectExtensionsBuilder { + override fun extension(id: String, type: String, builder: TCProjectExtensionBuilder.() -> Unit) { + val ext = TCProjectExtension() + ext.id = id + ext.type = type + + object : TCProjectExtensionBuilder { + override fun param(name: String, value: String?, builder: TCParameterBuilder.() -> Unit) { + ext.addParameter(TCProjectExtension::parameters, name, value, builder) + ext.parameters = ext.parameters?.sortedWith(compareBy { it.name ?: "" }) + } + }.builder() + + host.extensions = (host.extensions ?: listOf()) + ext + } + }.builder() +}