@Managed interface Address { String getCity() void setCity(String city) } @Managed interface Person { String getFirstName() void setFirstName(String n) String getLastName() void setLastName(String n) Address getAddress() } class PersonRules extends RuleSource { @Model void people(ModelMap people) { } } apply plugin: PersonRules // tag::configure-rule[] // tag::create-rule[] // tag::rule-inputs[] // tag::create-rule-no-config[] // tag::managed-type-nested-config-rule[] model { // end::create-rule[] // end::rule-inputs[] // end::create-rule-no-config[] // end::managed-type-nested-config-rule[] person { lastName = "Smith" } // end::configure-rule[] // tag::managed-type-nested-config-rule[] person { address { city = "Melbourne" } } // end::managed-type-nested-config-rule[] // tag::create-rule[] person(Person) { firstName = "John" } // end::create-rule[] // tag::create-rule-no-config[] barry(Person) // end::create-rule-no-config[] // tag::rule-inputs[] tasks { hello(Task) { def p = $.person doLast { println "Hello $p.firstName $p.lastName!" } } } // tag::create-rule-no-config[] // tag::configure-rule[] // tag::create-rule[] // tag::managed-type-nested-config-rule[] } // end::create-rule[] // end::create-rule-no-config[] // end::configure-rule[] // end::rule-inputs[] // end::managed-type-nested-config-rule[] // tag::model-map-nested-configure-rule[] // tag::model-map-nested-create-rule[] // tag::model-map-all-rule[] model { people { // end::model-map-nested-create-rule[] // end::model-map-all-rule[] john { lastName = "Smith" } // end::model-map-nested-configure-rule[] // tag::model-map-nested-create-rule[] john(Person) { firstName = "John" } // end::model-map-nested-create-rule[] // tag::model-map-all-rule[] all { println "configuring $it" } // end::model-map-all-rule[] barry(Person) { firstName = "Barry" lastName = "Barry" } } tasks { listPeople(Task) { doLast { def p = $.people p.each { println "Hello $it.firstName $it.lastName!" } } } // tag::model-map-nested-create-rule[] // tag::model-map-nested-configure-rule[] // tag::model-map-all-rule[] } } // end::model-map-nested-configure-rule[] // end::model-map-nested-create-rule[] // end::model-map-all-rule[]