From 7e776e380edc6bb862e982c5e9391e36b13f6cea Mon Sep 17 00:00:00 2001 From: Frank Viernau Date: Tue, 16 Jul 2024 23:27:50 +0200 Subject: [PATCH] refactor(cocoapods): Factor out `YamlNode.toPod()` Improve readability and prepare for removing a code redundancy. Signed-off-by: Frank Viernau --- .../cocoapods/src/main/kotlin/Lockfile.kt | 48 ++++++++++--------- 1 file changed, 25 insertions(+), 23 deletions(-) diff --git a/plugins/package-managers/cocoapods/src/main/kotlin/Lockfile.kt b/plugins/package-managers/cocoapods/src/main/kotlin/Lockfile.kt index fcf4cb852ecc..cf48df4ed510 100644 --- a/plugins/package-managers/cocoapods/src/main/kotlin/Lockfile.kt +++ b/plugins/package-managers/cocoapods/src/main/kotlin/Lockfile.kt @@ -22,6 +22,7 @@ package org.ossreviewtoolkit.plugins.packagemanagers.cocoapods import com.charleskorn.kaml.Yaml import com.charleskorn.kaml.YamlList import com.charleskorn.kaml.YamlMap +import com.charleskorn.kaml.YamlNode import com.charleskorn.kaml.YamlScalar import com.charleskorn.kaml.yamlList import com.charleskorn.kaml.yamlMap @@ -29,6 +30,7 @@ import com.charleskorn.kaml.yamlScalar import org.ossreviewtoolkit.plugins.packagemanagers.cocoapods.Lockfile.CheckoutOption import org.ossreviewtoolkit.plugins.packagemanagers.cocoapods.Lockfile.Dependency +import org.ossreviewtoolkit.plugins.packagemanagers.cocoapods.Lockfile.Pod internal data class Lockfile( val pods: List, @@ -54,29 +56,7 @@ internal data class Lockfile( internal fun String.parseLockfile(): Lockfile { val root = Yaml.default.parseToYamlNode(this).yamlMap - - val pods = root.get("PODS")!!.items.map { node -> - when { - node is YamlMap -> { - val (key, value) = node.yamlMap.entries.entries.single() - val (name, version) = parseNameAndVersion(key.content) - - Lockfile.Pod( - name = name, - version = version, - dependencies = value.yamlList.items.map { - val (depName, depVersion) = parseNameAndVersion(it.yamlScalar.content) - Lockfile.Pod(depName, depVersion) - } - ) - } - - else -> { - val (name, version) = parseNameAndVersion(node.yamlScalar.content) - Lockfile.Pod(name, version) - } - } - } + val pods = root.get("PODS")!!.items.map { it.toPod() } val checkoutOptions = root.get("CHECKOUT OPTIONS")?.entries.orEmpty().map { val name = it.key.content @@ -98,6 +78,28 @@ internal fun String.parseLockfile(): Lockfile { return Lockfile(pods, checkoutOptions, dependencies) } +private fun YamlNode.toPod(): Pod = + when { + this is YamlMap -> { + val (key, value) = yamlMap.entries.entries.single() + val (name, version) = parseNameAndVersion(key.content) + + Pod( + name = name, + version = version, + dependencies = value.yamlList.items.map { + val (depName, depVersion) = parseNameAndVersion(it.yamlScalar.content) + Pod(depName, depVersion) + } + ) + } + + else -> { + val (name, version) = parseNameAndVersion(yamlScalar.content) + Pod(name, version) + } + } + private fun parseNameAndVersion(entry: String): Pair { val info = entry.split(' ', limit = 2) val name = info[0]