1
0

Refactor models + add tests

This commit is contained in:
2020-10-06 21:40:12 +02:00
parent 6c0d17299e
commit bb5e955318
8 changed files with 159 additions and 27 deletions
+3 -4
View File
@@ -12,13 +12,12 @@ data class Dependency(
val name: String,
val groupId: String,
val artifactId: String,
val version: String,
val version: Version,
val default: Boolean,
val category: Category,
val scope: Scope,
val logger: String?,
val repository: String?,
val versionKey: String,
val repository: Repository?,
)
data class Repository(val name: String, val url: String)
@@ -30,7 +29,7 @@ data class Project(
val basePackage: String,
val inputs: List<Input>,
val dependencies: List<Dependency>,
val repositories: List<Repository>,
val repositories: Collection<Repository>,
)
data class Version(val name: String, val value: String)
+18 -17
View File
@@ -8,7 +8,6 @@ import com.electronwill.nightconfig.core.Config as NightConfig
data class StarterConfig(
val dependencies: List<Dependency>,
val inputs: List<Input>,
val repositories: List<Repository>,
)
class Config {
@@ -23,22 +22,29 @@ class Config {
@Suppress("UNCHECKED_CAST")
val versions = cfg.get<UnmodifiableConfig>("versions").valueMap() as Map<String, String>
val repositories = cfg.configMap("repositories")
.map { (name, values) ->
Repository(name, values["url"])
}
val dependencies = cfg.configMap("dependencies")
.map { (name, values) ->
val versionKey: String = values["version"] ?: name
val version = versions[versionKey] ?: error("Missing version for $name")
val repositoryName: String? = values["repository"]
val repo = repositoryName?.let { repoName -> repositories.find { it.name == repoName } }
Dependency(
name,
values["groupId"],
values["artifactId"],
version,
values.getOrElse("default", false),
values.getEnumOrElse("category", Category.Other),
values.getEnumOrElse("scope", Scope.Compile),
values["logger"],
values["repository"],
versionKey
name = name,
groupId = values["groupId"],
artifactId = values["artifactId"],
version = Version(versionKey, version),
default = values.getOrElse("default", false),
category = values.getEnumOrElse("category", Category.Other),
scope = values.getEnumOrElse("scope", Scope.Compile),
logger = values["logger"],
repository = repo,
)
}
@@ -47,11 +53,6 @@ class Config {
Input(name, values["display"], values["default"])
}
val repositories = cfg.configMap("repositories")
.map { (name, values) ->
Repository(name, values["url"])
}
return StarterConfig(dependencies, inputs, repositories)
return StarterConfig(dependencies, inputs)
}
}
@@ -37,7 +37,7 @@ class DepAsXmlPebbleFunction : PebbleFunction {
|${startTag("dependency")}
| ${tag("groupId", dep.groupId)}
| ${tag("artifactId", dep.artifactId)}
| ${tag("version", dep.version)}
| ${tag("version", dep.version.value)}
|${endTag("dependency")}
""".trimMargin()
@@ -38,9 +38,7 @@ class ZipRouteSupplier(
if (basePackage.contains("/") || basePackage.contains("..")) {
Response.badRequest()
} else {
val repositories = conf.repositories
.filter { repo -> repo.name in deps.mapNotNull { it.repository } }
val repositories = deps.mapNotNull { it.repository }.toSet()
val project = Project(projectName, basePackage, inputs, deps, repositories)
val outputStream = projectZip.createZip(project)
@@ -14,7 +14,7 @@ class PomTemplate(private val engine: PebbleEngine) : Template {
"dependencies" to project.dependencies.sortedBy { it.scope },
"repositories" to project.repositories,
"kotlinxSerialization" to project.dependencies.any { it.name == "kotlinx-serialization" },
"versions" to project.dependencies.map { Version(name = it.versionKey, value = it.version) }.toSet()
"versions" to project.dependencies.map { it.version }.toSet()
)
project.inputs.forEach {