From fdef6357fee6efeaef9d7162abfbade346249795 Mon Sep 17 00:00:00 2001 From: Piotr Przybylski Date: Fri, 19 Apr 2024 21:16:33 +0200 Subject: [PATCH] Make CustomFicusInstances extendable --- .../util/config/CustomFicusInstances.scala | 13 ++++++-- .../config/CustomFicusInstancesSpec.scala | 32 +++++++++++++++++++ 2 files changed, 43 insertions(+), 2 deletions(-) create mode 100644 utils/utils/src/test/scala/pl/touk/nussknacker/engine/util/config/CustomFicusInstancesSpec.scala diff --git a/utils/utils/src/main/scala/pl/touk/nussknacker/engine/util/config/CustomFicusInstances.scala b/utils/utils/src/main/scala/pl/touk/nussknacker/engine/util/config/CustomFicusInstances.scala index fd2e5b90d7e..2fa83b31309 100644 --- a/utils/utils/src/main/scala/pl/touk/nussknacker/engine/util/config/CustomFicusInstances.scala +++ b/utils/utils/src/main/scala/pl/touk/nussknacker/engine/util/config/CustomFicusInstances.scala @@ -8,8 +8,15 @@ import net.ceedubs.ficus.readers._ import java.util.UUID import scala.language.implicitConversions -// We exclude URLReader because of our own implementation with fallback to a File url -object CustomFicusInstances +/** + * Configuration extending default Ficus decoding. + * + * Customizations: + * + * - [[URLReader]] is modified to default to the `file://` scheme + * - String values can be read as [[UUID]] instances + */ +trait CustomFicusInstances extends AnyValReaders with StringReader with SymbolReader @@ -36,3 +43,5 @@ object CustomFicusInstances implicit def toFicusConfig(config: Config): FicusConfig = SimpleFicusConfig(config) } + +object CustomFicusInstances extends CustomFicusInstances diff --git a/utils/utils/src/test/scala/pl/touk/nussknacker/engine/util/config/CustomFicusInstancesSpec.scala b/utils/utils/src/test/scala/pl/touk/nussknacker/engine/util/config/CustomFicusInstancesSpec.scala new file mode 100644 index 00000000000..1180cf4f3fc --- /dev/null +++ b/utils/utils/src/test/scala/pl/touk/nussknacker/engine/util/config/CustomFicusInstancesSpec.scala @@ -0,0 +1,32 @@ +package pl.touk.nussknacker.engine.util.config + +import com.typesafe.config.ConfigValueFactory.fromAnyRef +import com.typesafe.config.ConfigFactory +import net.ceedubs.ficus.readers.ArbitraryTypeReader._ +import org.scalatest.flatspec.AnyFlatSpec +import org.scalatest.matchers.should.Matchers +import CustomFicusInstances._ + +import java.io.File +import java.net.URL +import java.util.UUID + +class CustomFicusInstancesSpec extends AnyFlatSpec with Matchers { + + it should "decode URL using custom decoder" in { + case class Container(url: URL) + + val config = ConfigFactory.empty().withValue("url", fromAnyRef("/absolute/path")) + + config.as[Container].url shouldBe new File("/absolute/path").toURI.toURL + } + + it should "decode UUID" in { + case class Container(uuid: UUID) + + val config = ConfigFactory.empty().withValue("uuid", fromAnyRef("a0cddbd7-0f2d-4c86-8434-8811c45f18dd")) + + config.as[Container].uuid shouldBe UUID.fromString("a0cddbd7-0f2d-4c86-8434-8811c45f18dd") + } + +}