A dynamic DSL for building complex objects in Scala 2.10. For a discussion of the aims and methods of the library, see the post Making it easy with Lofty on the TIM Group blog.
Example usage:
val withoutAge = for {
address <- builder[Address]
_ <- address lines Seq("12 Maudlin Street", "Manchester")
_ <- address postcode("VB6 5UX")
person <- builder[Person]
_ <- person name "Stephen Patrick"
_ <- person address address
} yield person
buildFrom(withoutAge) must beEqualTo(Person("Stephen Patrick", None, Address(Seq("12 Maudlin Street", "Manchester"), "VB6 5UX")))
val withAge = for {
person <- withoutAge
_ <- person age 63
} yield person
buildFrom(withAge) must beEqualTo(Person("Stephen Patrick", Some(63), Address(Seq("12 Maudlin Street", "Manchester"), "VB6 5UX")))
val movedToDulwich = for {
newAddress <- builder[Address]
_ <- newAddress lines Seq("42 Penguin Ave", "Dulwich")
_ <- newAddress postcode("E17 4TW")
person <- withoutAge
_ <- person address newAddress
} yield person
buildFrom(movedToDulwich) must beEqualTo(Person("Stephen Patrick", None, Address(Seq("42 Penguin Ave", "Dulwich"), "E17 4TW")))