diff --git a/README.md b/README.md index 154b33494..6f6d006d7 100644 --- a/README.md +++ b/README.md @@ -111,6 +111,11 @@ sbt makeSite HTML Documentation should be generated at `target/sphinx/html/index.html`. +Alternatively use Docker: + +```bash +docker run --rm -v ./docs:/docs sphinxdoc/sphinx:3.2.1 bash -c "pip install sphinx-rtd-theme && make html" +``` ## Thanks diff --git a/chimney/src/main/scala/io/scalaland/chimney/dsl/FlagsDsl.scala b/chimney/src/main/scala/io/scalaland/chimney/dsl/FlagsDsl.scala index 1c31a195d..e9c438681 100644 --- a/chimney/src/main/scala/io/scalaland/chimney/dsl/FlagsDsl.scala +++ b/chimney/src/main/scala/io/scalaland/chimney/dsl/FlagsDsl.scala @@ -23,16 +23,16 @@ trait FlagsDsl[UpdateFlag[_ <: TransformerFlags], Flags <: TransformerFlags] { /** Enable fallback to default case class values in `To` type. * - * @see [[https://scalalandio.github.io/chimney/transformers/default-values.html#disabling-default-values-in-generated-transformer]] for more details + * By default in such case derivation will fail. By enabling this flag, derivation will fallback to default value. + * + * @see [[https://scalalandio.github.io/chimney/transformers/default-values.html#enabling-default-values-in-generated-transformer]] for more details */ def enableDefaultValues: UpdateFlag[Enable[DefaultValues, Flags]] = enableFlag[DefaultValues] /** Fail derivation if `From` type is missing field even if `To` has default value for it. * - * By default in such case derivation will fallback to default values. - * - * @see [[https://scalalandio.github.io/chimney/transformers/default-values.html#disabling-default-values-in-generated-transformer]] for more details + * @see [[https://scalalandio.github.io/chimney/transformers/default-values.html#enabling-default-values-in-generated-transformer]] for more details */ def disableDefaultValues: UpdateFlag[Disable[DefaultValues, Flags]] = disableFlag[DefaultValues] diff --git a/chimney/src/main/scala/io/scalaland/chimney/internal/macros/TransformerConfigSupport.scala b/chimney/src/main/scala/io/scalaland/chimney/internal/macros/TransformerConfigSupport.scala index 51e07be86..69a99f9a5 100644 --- a/chimney/src/main/scala/io/scalaland/chimney/internal/macros/TransformerConfigSupport.scala +++ b/chimney/src/main/scala/io/scalaland/chimney/internal/macros/TransformerConfigSupport.scala @@ -174,7 +174,7 @@ trait TransformerConfigSupport extends MacroUtils { case class TransformerFlags( methodAccessors: Boolean = false, - processDefaultValues: Boolean = true, + processDefaultValues: Boolean = false, beanSetters: Boolean = false, beanGetters: Boolean = false, optionDefaultsToNone: Boolean = false, diff --git a/chimney/src/test/scala/io/scalaland/chimney/DslSpec.scala b/chimney/src/test/scala/io/scalaland/chimney/DslSpec.scala index bdde162d3..38cca3d4b 100644 --- a/chimney/src/test/scala/io/scalaland/chimney/DslSpec.scala +++ b/chimney/src/test/scala/io/scalaland/chimney/DslSpec.scala @@ -114,8 +114,11 @@ object DslSpec extends TestSuite { } "not use None as default when other default value is set" - { - SomeFoo("foo").into[Foobar2].transform ==> Foobar2("foo", Some(42)) - SomeFoo("foo").into[Foobar2].enableOptionDefaultsToNone.transform ==> Foobar2("foo", Some(42)) + SomeFoo("foo").into[Foobar2].enableDefaultValues.transform ==> Foobar2("foo", Some(42)) + SomeFoo("foo").into[Foobar2].enableDefaultValues.enableOptionDefaultsToNone.transform ==> Foobar2( + "foo", + Some(42) + ) } "not compile if default value is missing and no .enableOptionDefaultsToNone" - { @@ -199,6 +202,7 @@ object DslSpec extends TestSuite { case class Baahr(x: Int, y: Bar) "use default parameter value" - { + implicit val cfg = TransformerConfiguration.default.enableDefaultValues "field does not exists - the source" - { Foo(10).transformInto[Bar] ==> Bar(10, 30L) diff --git a/docs/source/transformers/default-values.rst b/docs/source/transformers/default-values.rst index 787a06606..fc20f0277 100644 --- a/docs/source/transformers/default-values.rst +++ b/docs/source/transformers/default-values.rst @@ -1,14 +1,20 @@ Default values support ====================== -Chimney respects case classes' default values as a possible target +Chimney allows case classes' default values as a possible target field value source. -Automatic value provision -------------------------- +Enabling default values in generated transformer +------------------------------------------------ -Field's default value is automatically used as a target value when constructing -target object. +.. warning:: + + Prior to version 0.7.0 fallback to default values was automatically enabled + and required explicit disabling. + +Field's default value can be enabled as a target value when constructing +target object. The support for them has to be explicitly enabled to avoid +accidents. .. code-block:: scala @@ -17,7 +23,17 @@ target object. val stevie = Catterpillar(5, "Steve") - val steve = stevie.transformInto[Butterfly] + //val steve = stevie.transformInto[Butterfly] // fails with + // error: Chimney can't derive transformation from Catterpillar to Butterfly + // + // Butterfly + // wingsColor: String - no field named wingsColor in source type Catterpillar + // + // Consult https://scalalandio.github.io/chimney for usage examples. + // + // .transform + // ^ + val steve = stevie.into[Butterfly].enableDefaultValues.transform // Butterfly(5, "Steve", "purple") Providing the value manually has always a priority over the default. @@ -25,34 +41,12 @@ Providing the value manually has always a priority over the default. .. code-block:: scala val steve = stevie.into[Butterfly] + .enableDefaultValues .withFieldConst(_.wingsColor, "yellow") .transform // Butterfly(5, "Steve", "yellow") -Disabling default values in generated transformer -------------------------------------------------- - -Using ``.disableDefaultValues`` operation it's possible to disable -lookup for default values and require them always to be passed explicitly. - -.. code-block:: scala - - val steve = stevie - .into[Butterfly] - .disableDefaultValues - .transform - // error: Chimney can't derive transformation from Catterpillar to Butterfly - // - // Butterfly - // wingsColor: String - no field named wingsColor in source type Catterpillar - // - // Consult https://scalalandio.github.io/chimney for usage examples. - // - // .transform - // ^ - - Default values for ``Option`` fields ------------------------------------