Refactor models + add tests
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user