You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@grails.apache.org by ja...@apache.org on 2026/05/01 11:33:13 UTC

(grails-static-website) 01/01: Merge pull request #453 from apache/phase-10-bulk-migration-batch-1

This is an automated email from the ASF dual-hosted git repository.

jamesfredley pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/grails-static-website.git

commit cfb355f0ac205398756dae3f468cdbfe0649e047
Merge: c76a517c41d b8ef6e9dca0
Author: James Fredley <ja...@users.noreply.github.com>
AuthorDate: Fri May 1 06:33:08 2026 -0500

    Merge pull request #453 from apache/phase-10-bulk-migration-batch-1
    
    Phase 10 batch-1+2: 27 fixtures + 2 plugin bug fixes (refs #354)

 .../website/gradle/RenderGuidesPlugin.groovy       |  93 ++++-----
 .../website/gradle/tasks/VendorGuideTask.groovy    |  57 ++++--
 conf/guides.yml                                    | 129 +++++++++++++
 .../v4/guide/gettingStarted.adoc                   |   3 +
 .../v4/guide/helpWithGrails.adoc                   |   1 +
 guides/database-per-tenant/v4/guide/howto.adoc     |   1 +
 .../v4/guide/integrationTest.adoc                  |  33 ++++
 .../database-per-tenant/v4/guide/requirements.adoc |   1 +
 .../v4/guide/runningTheApp.adoc                    |   9 +
 .../v4/guide/setupMultitenancy.adoc                |   4 +
 .../v4/guide/testingTheApp.adoc                    |  73 +++++++
 guides/database-per-tenant/v4/guide/training.adoc  |   1 +
 .../v4/guide/writingTheApp.adoc                    |   7 +
 .../v4/guide/writingTheApp/domainClasses.adoc      |  29 +++
 .../v4/guide/writingTheApp/multiTenantLogic.adoc   |  38 ++++
 .../multiTenantLogic/readingData.adoc              |  59 ++++++
 .../multiTenantLogic/writingData.adoc              |  37 ++++
 .../v4/guide/writingTheApp/seedData.adoc           |  13 ++
 .../setupMultitenancy/dataSources.adoc             |  12 ++
 .../setupMultitenancy/multiTenancyMode.adoc        |  20 ++
 .../setupMultitenancy/multiTenancyResolver.adoc    |  29 +++
 .../v4/guide/writingTheApp/tenantSelection.adoc    |  68 +++++++
 guides/database-per-tenant/v4/manifest.yml         |  18 ++
 .../database-per-tenant/v4/snippets/MANIFEST.yml   |  41 ++++
 .../v4/snippets/gradle.properties                  |   3 +
 .../v4/snippets/grails-app/conf/application.yml    | 121 ++++++++++++
 .../example/ManufacturerController.groovy          |  42 ++++
 .../controllers/example/UrlMappings.groovy         |  27 +++
 .../controllers/example/VehicleController.groovy   |  89 +++++++++
 .../grails-app/domain/example/Engine.groovy        |  11 ++
 .../grails-app/domain/example/Manufacturer.groovy  |   9 +
 .../grails-app/domain/example/Vehicle.groovy       |  14 ++
 .../grails-app/init/example/Application.groovy     |  25 +++
 .../services/example/VehicleService.groovy         |  50 +++++
 .../v4/snippets/grails-app/views/index.gsp         |  80 ++++++++
 .../groovy/example/ManufacturersPage.groovy        |  21 ++
 .../groovy/example/NewVehiclePage.groovy           |  20 ++
 .../groovy/example/ShowVehiclePage.groovy          |  16 ++
 .../groovy/example/TenantSelectionFuncSpec.groovy  |  93 +++++++++
 .../groovy/example/VehiclesPage.groovy             |  21 ++
 .../groovy/example/VehicleControllerSpec.groovy    | 146 ++++++++++++++
 guides/database-per-tenant/v4/toc.yml              |  26 +++
 .../grails-codenarc/v4/guide/addingCodenarc.adoc   | 144 ++++++++++++++
 guides/grails-codenarc/v4/guide/checkingRule.adoc  |  28 +++
 guides/grails-codenarc/v4/guide/customRule.adoc    |  77 ++++++++
 .../v4/guide/finalConfiguration.adoc               |  25 +++
 .../grails-codenarc/v4/guide/gettingStarted.adoc   |   7 +
 .../grails-codenarc/v4/guide/helpWithGrails.adoc   |   1 +
 guides/grails-codenarc/v4/guide/howto.adoc         |   1 +
 guides/grails-codenarc/v4/guide/multiproject.adoc  |   6 +
 guides/grails-codenarc/v4/guide/requirements.adoc  |   1 +
 guides/grails-codenarc/v4/guide/ruleTypes.adoc     |  11 ++
 guides/grails-codenarc/v4/guide/training.adoc      |   1 +
 .../v4/guide/writingCustomRule.adoc                |  12 ++
 guides/grails-codenarc/v4/guide/writingTheApp.adoc |   1 +
 guides/grails-codenarc/v4/manifest.yml             |  18 ++
 guides/grails-codenarc/v4/snippets/MANIFEST.yml    |  25 +++
 .../grails-codenarc/v4/snippets/app/build.gradle   |  84 ++++++++
 .../grails-app/controllers/demo/UrlMappings.groovy |  20 ++
 .../grails-app/services/demo/DemoService.groovy    |  11 ++
 .../v4/snippets/codenarc-rule/build.gradle         |  12 ++
 .../rule/grails/GrailsTransactionalRule.groovy     |  49 +++++
 .../main/resources/codenarc-messages.properties    |   2 +
 .../src/main/resources/rulesets/grails-extra.xml   |   7 +
 .../rule/grails/GrailsTransactionalRuleTest.groovy | 131 +++++++++++++
 .../v4/snippets/gradle/codenarc.gradle             |  18 ++
 guides/grails-codenarc/v4/toc.yml                  |  18 ++
 .../v4/guide/docker.adoc                           |  13 ++
 .../v4/guide/domainClass.adoc                      |   8 +
 .../v4/guide/gettingStarted.adoc                   |   9 +
 .../v4/guide/gradle.adoc                           |  15 ++
 .../v4/guide/gradleDockerTasks.adoc                |  24 +++
 .../v4/guide/helpWithGrails.adoc                   |   1 +
 .../v4/guide/howto.adoc                            |   1 +
 .../v4/guide/postgresql.adoc                       |  15 ++
 .../v4/guide/running.adoc                          |  24 +++
 .../v4/guide/training.adoc                         |   1 +
 .../v4/guide/usingOnlyDocker.adoc                  |  79 ++++++++
 .../v4/guide/writing.adoc                          |   0
 .../v4/manifest.yml                                |  18 ++
 .../v4/snippets/MANIFEST.yml                       |  15 ++
 .../v4/snippets/build.gradle                       | 188 ++++++++++++++++++
 .../v4/snippets/grails-app/conf/application.yml    | 139 +++++++++++++
 .../v4/snippets/grails-app/domain/demo/Book.groovy |   8 +
 .../v4/snippets/src/main/docker/setup.sh           |  21 ++
 guides/grails-docker-external-services/v4/toc.yml  |  18 ++
 .../grails-elasticbeanstalk/v4/guide/deploy.adoc   |  56 ++++++
 .../v4/guide/gettingStarted.adoc                   |   6 +
 .../v4/guide/nextSteps.adoc                        |   3 +
 .../v4/guide/requirements.adoc                     |   3 +
 .../grails-elasticbeanstalk/v4/guide/solution.adoc |   1 +
 .../v4/guide/writingTheApp.adoc                    |  45 +++++
 guides/grails-elasticbeanstalk/v4/manifest.yml     |  18 ++
 .../v4/snippets/MANIFEST.yml                       |  13 ++
 .../v4/snippets/build.gradle                       |  94 +++++++++
 .../v4/snippets/grails-app/conf/application.yml    | 129 +++++++++++++
 .../groovy/example/grails/HealthSpec.groovy        |  33 ++++
 guides/grails-elasticbeanstalk/v4/toc.yml          |   9 +
 .../grails-elasticsearch/v4/guide/bootstrap.adoc   |   7 +
 .../grails-elasticsearch/v4/guide/controller.adoc  |  17 ++
 guides/grails-elasticsearch/v4/guide/docker.adoc   |  58 ++++++
 guides/grails-elasticsearch/v4/guide/domain.adoc   |  11 ++
 .../grails-elasticsearch/v4/guide/esfeatures.adoc  |   7 +
 .../v4/guide/functionalTest.adoc                   |  19 ++
 .../v4/guide/gettingStarted.adoc                   |   5 +
 .../v4/guide/gormDataService.adoc                  |   7 +
 .../v4/guide/helpWithGrails.adoc                   |   1 +
 guides/grails-elasticsearch/v4/guide/howto.adoc    |   1 +
 guides/grails-elasticsearch/v4/guide/install.adoc  |  30 +++
 guides/grails-elasticsearch/v4/guide/jsonview.adoc |   7 +
 .../grails-elasticsearch/v4/guide/logchanges.adoc  |   7 +
 .../v4/guide/modifyUrlMappings.adoc                |  15 ++
 .../v4/guide/requirements.adoc                     |   6 +
 .../grails-elasticsearch/v4/guide/searchable.adoc  |  44 +++++
 guides/grails-elasticsearch/v4/guide/service.adoc  |  21 ++
 guides/grails-elasticsearch/v4/guide/summary.adoc  |   5 +
 guides/grails-elasticsearch/v4/guide/training.adoc |   1 +
 guides/grails-elasticsearch/v4/guide/writing.adoc  |   0
 guides/grails-elasticsearch/v4/manifest.yml        |  16 ++
 .../grails-elasticsearch/v4/snippets/MANIFEST.yml  |  37 ++++
 .../grails-elasticsearch/v4/snippets/build.gradle  |  90 +++++++++
 .../v4/snippets/grails-app/conf/application.yml    | 123 ++++++++++++
 .../v4/snippets/grails-app/conf/logback.groovy     |  39 ++++
 .../controllers/demo/BookController.groovy         |  26 +++
 .../grails-app/controllers/demo/UrlMappings.groovy |  22 +++
 .../v4/snippets/grails-app/domain/demo/Book.groovy |  31 +++
 .../snippets/grails-app/init/demo/BootStrap.groovy |  99 ++++++++++
 .../services/demo/BookDataService.groovy           |  11 ++
 .../services/demo/BookSearchService.groovy         |  13 ++
 .../v4/snippets/grails-app/views/book/search.gson  |  11 ++
 .../demo/BookControllerFunctionalSpec.groovy       |  24 +++
 .../integration-test/groovy/demo/RestSpec.groovy   |  15 ++
 .../src/test/groovy/demo/BookControllerSpec.groovy |  32 +++
 .../test/groovy/demo/BookSearchServiceSpec.groovy  |  19 ++
 .../src/test/groovy/demo/UrlMappingsSpec.groovy    |  18 ++
 guides/grails-elasticsearch/v4/toc.yml             |  25 +++
 .../guide/applicationDeploymentConfiguration.adoc  |   1 +
 .../grails-google-cloud/v4/guide/cleaningUp.adoc   |  69 +++++++
 guides/grails-google-cloud/v4/guide/cloudSDK.adoc  |  15 ++
 guides/grails-google-cloud/v4/guide/cloudSQL.adoc  |  18 ++
 .../grails-google-cloud/v4/guide/cloudStorage.adoc |  98 ++++++++++
 guides/grails-google-cloud/v4/guide/costs.adoc     |   2 +
 .../v4/guide/createCloudSQLInstance.adoc           |  24 +++
 .../v4/guide/datasourceUsingCloudSQL.adoc          |  39 ++++
 .../v4/guide/deployingTheApp.adoc                  |  11 ++
 .../grails-google-cloud/v4/guide/domainClass.adoc  |  10 +
 .../v4/guide/gettingStarted.adoc                   |   4 +
 .../v4/guide/googleAppEngine.adoc                  |  12 ++
 .../v4/guide/googleAppEngineGradlePlugin.adoc      |  18 ++
 .../v4/guide/helpWithGrails.adoc                   |   1 +
 .../v4/guide/howToComplete.adoc                    |  40 ++++
 guides/grails-google-cloud/v4/guide/learnMore.adoc |  11 ++
 guides/grails-google-cloud/v4/guide/logging.adoc   |  29 +++
 guides/grails-google-cloud/v4/guide/seedData.adoc  |   9 +
 .../v4/guide/springBootJetty.adoc                  |  29 +++
 guides/grails-google-cloud/v4/guide/training.adoc  |   1 +
 .../grails-google-cloud/v4/guide/urlMappings.adoc  |  22 +++
 .../v4/guide/whatYouWillNeed.adoc                  |   5 +
 .../v4/guide/writingTheApp.adoc                    |   0
 guides/grails-google-cloud/v4/manifest.yml         |  20 ++
 .../grails-google-cloud/v4/snippets/MANIFEST.yml   |  31 +++
 .../grails-google-cloud/v4/snippets/build.gradle   |  92 +++++++++
 .../v4/snippets/grails-app/conf/application.yml    | 145 ++++++++++++++
 .../controllers/demo/BookController.groovy         | 214 +++++++++++++++++++++
 .../controllers/demo/FeaturedImageCommand.groovy   |  27 +++
 .../controllers/demo/LegalController.groovy        |  13 ++
 .../v4/snippets/grails-app/domain/demo/Book.groovy |  16 ++
 .../snippets/grails-app/init/demo/BootStrap.groovy |  19 ++
 .../services/demo/BookGormService.groovy           |  57 ++++++
 .../services/demo/GoogleCloudStorageService.groovy |  56 ++++++
 .../demo/UploadBookFeaturedImageService.groovy     |  33 ++++
 .../grails-app/views/book/editFeaturedImage.gsp    |  39 ++++
 .../v4/snippets/src/main/appengine/app.yaml        |  16 ++
 guides/grails-google-cloud/v4/toc.yml              |  38 ++++
 .../grails-javamelody/v4/guide/gettingStarted.adoc |   4 +
 .../grails-javamelody/v4/guide/helpWithGrails.adoc |   1 +
 guides/grails-javamelody/v4/guide/howto.adoc       |  24 +++
 guides/grails-javamelody/v4/guide/melody.adoc      | 100 ++++++++++
 guides/grails-javamelody/v4/guide/nextSteps.adoc   |   3 +
 .../v4/guide/originalAppGrails.adoc                |  61 ++++++
 .../grails-javamelody/v4/guide/requirements.adoc   |   1 +
 .../grails-javamelody/v4/guide/runningTheApp.adoc  |   3 +
 guides/grails-javamelody/v4/guide/training.adoc    |   1 +
 guides/grails-javamelody/v4/manifest.yml           |  16 ++
 guides/grails-javamelody/v4/snippets/MANIFEST.yml  |  23 +++
 guides/grails-javamelody/v4/snippets/build.gradle  |  97 ++++++++++
 .../v4/snippets/grails-app/conf/application.yml    | 133 +++++++++++++
 .../controllers/demo/BookController.groovy         |  20 ++
 .../grails-app/controllers/demo/UrlMappings.groovy |  16 ++
 .../v4/snippets/grails-app/domain/demo/Book.groovy |  15 ++
 .../snippets/grails-app/init/demo/BootStrap.groovy | 115 +++++++++++
 .../services/demo/BookDataService.groovy           |  31 +++
 .../snippets/src/main/groovy/demo/BookImage.groovy |   9 +
 guides/grails-javamelody/v4/toc.yml                |  14 ++
 .../v5/guide/declarativeClient.adoc                |  39 ++++
 .../v5/guide/gettingStarted.adoc                   |   3 +
 .../v5/guide/helpWithGrails.adoc                   |   1 +
 guides/grails-micronaut-http/v5/guide/howto.adoc   |   1 +
 .../v5/guide/lowLevelClient.adoc                   |  48 +++++
 .../v5/guide/micronautHttpClient.adoc              |  14 ++
 .../v5/guide/requirements.adoc                     |   1 +
 .../v5/guide/runningTheApp.adoc                    |   1 +
 guides/grails-micronaut-http/v5/guide/test.adoc    |  43 +++++
 .../grails-micronaut-http/v5/guide/training.adoc   |   1 +
 .../v5/guide/writingTheApp.adoc                    |  12 ++
 guides/grails-micronaut-http/v5/manifest.yml       |  20 ++
 .../grails-micronaut-http/v5/snippets/MANIFEST.yml |  29 +++
 .../grails-micronaut-http/v5/snippets/build.gradle |  81 ++++++++
 .../v5/snippets/grails-app/conf/application.yml    | 124 ++++++++++++
 .../example/grails/SearchController.groovy         |  25 +++
 .../domain/example/grails/RecordLabel.groovy       |   8 +
 .../init/example/grails/BootStrap.groovy           |  16 ++
 .../example/grails/ItunesSearchService.groovy      |  46 +++++
 .../example/grails/RecordLabelService.groovy       |   8 +
 .../grails/RecordLabelControllerSpec.groovy        |  49 +++++
 .../src/main/groovy/example/grails/Album.groovy    |  10 +
 .../main/groovy/example/grails/ItunesClient.groovy |  11 ++
 .../main/groovy/example/grails/SearchResult.groovy |   9 +
 guides/grails-micronaut-http/v5/toc.yml            |  18 ++
 .../v4/guide/buildingAnalytics.adoc                |  69 +++++++
 .../v4/guide/gettingStarted.adoc                   |   1 +
 .../v4/guide/helpWithGrails.adoc                   |   1 +
 guides/grails-micronaut-kafka/v4/guide/howto.adoc  |  23 +++
 .../v4/guide/kakfaDocker.adoc                      |  19 ++
 .../grails-micronaut-kafka/v4/guide/nextSteps.adoc |   2 +
 .../v4/guide/originalAppGrails.adoc                |  88 +++++++++
 .../v4/guide/requirements.adoc                     |   1 +
 .../grails-micronaut-kafka/v4/guide/running.adoc   |  41 ++++
 .../v4/guide/runningTheApp.adoc                    |   4 +
 .../grails-micronaut-kafka/v4/guide/training.adoc  |   1 +
 guides/grails-micronaut-kafka/v4/manifest.yml      |  16 ++
 .../v4/snippets/MANIFEST.yml                       |  43 +++++
 .../v4/snippets/build.gradle                       |  99 ++++++++++
 .../grails-app/conf/application.yml                | 126 ++++++++++++
 .../example/grails/AnalyticsController.groovy      |  12 ++
 .../domain/example/grails/BookAnalytics.groovy     |  11 ++
 .../example/grails/BookAnalyticsGormService.groovy |  20 ++
 .../grails-app/views/analytics/_bookAnalytics.gson |   8 +
 .../grails-app/views/analytics/index.gson          |   5 +
 .../groovy/example/grails/AnalyticsListener.groovy |  34 ++++
 .../v4/snippets/docker/docker-compose.yml          |  21 ++
 .../v4/snippets/grails-app/conf/application.yml    | 121 ++++++++++++
 .../example/grails/BooksController.groovy          |  32 +++
 .../controllers/example/grails/UrlMappings.groovy  |  23 +++
 .../grails-app/domain/example/grails/Book.groovy   |  11 ++
 .../init/example/grails/BootStrap.groovy           |  21 ++
 .../services/example/grails/BookGormService.groovy |  12 ++
 .../v4/snippets/grails-app/views/books/_book.gson  |   9 +
 .../v4/snippets/grails-app/views/books/index.gson  |   5 +
 .../groovy/example/grails/AnalyticsClient.groovy   |  11 ++
 guides/grails-micronaut-kafka/v4/toc.yml           |  19 ++
 .../grails-multi-project-build/v4/guide/code.adoc  |  38 ++++
 .../v4/guide/createprojects.adoc                   | 104 ++++++++++
 .../v4/guide/dependencies.adoc                     |  37 ++++
 .../v4/guide/featuresgradlefiles.adoc              |  21 ++
 .../v4/guide/gettingStarted.adoc                   |   2 +
 .../v4/guide/helpWithGrails.adoc                   |   1 +
 .../grails-multi-project-build/v4/guide/howto.adoc |   1 +
 .../v4/guide/openide.adoc                          |   6 +
 .../v4/guide/overview.adoc                         |   4 +
 .../v4/guide/requirements.adoc                     |   1 +
 .../v4/guide/rootgradle.adoc                       |  30 +++
 .../v4/guide/runningTheApp.adoc                    |  13 ++
 .../v4/guide/training.adoc                         |   1 +
 .../v4/guide/writingTheApp.adoc                    |   5 +
 guides/grails-multi-project-build/v4/manifest.yml  |  18 ++
 .../v4/snippets/MANIFEST.yml                       |  27 +++
 .../v4/snippets/app/build.gradle                   |  25 +++
 .../controllers/app/PersonController.groovy        |  13 ++
 .../groovy/app/PersonControllerSpec.groovy         |  32 +++
 .../v4/snippets/build.gradle                       | 142 ++++++++++++++
 .../v4/snippets/gradle/geb.gradle                  |  12 ++
 .../v4/snippets/groovylib/build.gradle             |  11 ++
 .../groovylib/src/main/groovy/demo/OCI.groovy      |  15 ++
 .../v4/snippets/plugin/build.gradle                |  12 ++
 .../services/demo/RandomPersonService.groovy       |  14 ++
 .../v4/snippets/settings.gradle                    |   3 +
 guides/grails-multi-project-build/v4/toc.yml       |  19 ++
 guides/grails-oauth-google/v4/guide/appConfig.adoc |   6 +
 .../v4/guide/authController.adoc                   |  28 +++
 .../v4/guide/buildingTheApp.adoc                   |   2 +
 .../v4/guide/configureGoogleOAuth.adoc             |  66 +++++++
 .../grails-oauth-google/v4/guide/controllers.adoc  |  20 ++
 guides/grails-oauth-google/v4/guide/data.adoc      |  10 +
 .../grails-oauth-google/v4/guide/dependencies.adoc |   7 +
 guides/grails-oauth-google/v4/guide/domain.adoc    |  14 ++
 .../v4/guide/gettingStarted.adoc                   |   4 +
 .../v4/guide/helpWithGrails.adoc                   |   1 +
 guides/grails-oauth-google/v4/guide/howto.adoc     |   6 +
 guides/grails-oauth-google/v4/guide/logging.adoc   |  10 +
 guides/grails-oauth-google/v4/guide/logout.adoc    |  24 +++
 guides/grails-oauth-google/v4/guide/nextSteps.adoc |   1 +
 guides/grails-oauth-google/v4/guide/oauth2.adoc    |   4 +
 .../grails-oauth-google/v4/guide/oauthConfig.adoc  |  61 ++++++
 .../grails-oauth-google/v4/guide/requirements.adoc |   1 +
 .../v4/guide/runningTheCompleteApp.adoc            |  30 +++
 guides/grails-oauth-google/v4/guide/services.adoc  |  16 ++
 .../grails-oauth-google/v4/guide/tokenReader.adoc  |  23 +++
 guides/grails-oauth-google/v4/guide/views.adoc     |  44 +++++
 guides/grails-oauth-google/v4/manifest.yml         |  17 ++
 .../grails-oauth-google/v4/snippets/MANIFEST.yml   |  43 +++++
 .../grails-oauth-google/v4/snippets/build.gradle   |  91 +++++++++
 .../v4/snippets/grails-app/conf/application.groovy |  69 +++++++
 .../grails-app/conf/spring/resources.groovy        |  16 ++
 .../controllers/demo/AuthController.groovy         |  62 ++++++
 .../controllers/demo/BookController.groovy         |  22 +++
 .../demo/BookFavouriteController.groovy            |  38 ++++
 .../v4/snippets/grails-app/domain/demo/Book.groovy |  20 ++
 .../grails-app/domain/demo/BookFavourite.groovy    |  14 ++
 .../snippets/grails-app/init/demo/BootStrap.groovy | 115 +++++++++++
 .../services/demo/BookDataService.groovy           |  45 +++++
 .../services/demo/BookFavouriteDataService.groovy  |  13 ++
 .../grails-app/views/auth/_loginWithGoogle.gsp     |   4 +
 .../v4/snippets/grails-app/views/auth/success.gsp  |   6 +
 .../v4/snippets/grails-app/views/book/index.gsp    |  17 ++
 .../v4/snippets/grails-app/views/book/show.gsp     |  24 +++
 .../v4/snippets/grails-app/views/layouts/main.gsp  |  73 +++++++
 .../v4/snippets/grails-app/views/login/auth.gsp    |  17 ++
 .../main/groovy/demo/JwtCookieTokenReader.groovy   |  34 ++++
 guides/grails-oauth-google/v4/toc.yml              |  28 +++
 .../grails-oauth-twitter/v4/guide/appConfig.adoc   |   6 +
 .../v4/guide/authController.adoc                   |  28 +++
 .../v4/guide/buildingTheApp.adoc                   |   2 +
 .../grails-oauth-twitter/v4/guide/controllers.adoc |  20 ++
 guides/grails-oauth-twitter/v4/guide/data.adoc     |  10 +
 .../v4/guide/dependencies.adoc                     |   7 +
 guides/grails-oauth-twitter/v4/guide/domain.adoc   |  14 ++
 .../v4/guide/gettingStarted.adoc                   |   2 +
 .../v4/guide/helpWithGrails.adoc                   |   1 +
 guides/grails-oauth-twitter/v4/guide/howto.adoc    |   6 +
 guides/grails-oauth-twitter/v4/guide/logging.adoc  |  10 +
 guides/grails-oauth-twitter/v4/guide/logout.adoc   |  24 +++
 .../grails-oauth-twitter/v4/guide/nextSteps.adoc   |   1 +
 guides/grails-oauth-twitter/v4/guide/oauth2.adoc   |   4 +
 .../v4/guide/oauth2/configureOAuth.adoc            |  36 ++++
 .../grails-oauth-twitter/v4/guide/oauthConfig.adoc |  55 ++++++
 .../v4/guide/requirements.adoc                     |   1 +
 .../v4/guide/runningTheCompleteApp.adoc            |  30 +++
 guides/grails-oauth-twitter/v4/guide/services.adoc |  18 ++
 .../grails-oauth-twitter/v4/guide/tokenReader.adoc |  23 +++
 guides/grails-oauth-twitter/v4/guide/views.adoc    |  44 +++++
 guides/grails-oauth-twitter/v4/manifest.yml        |  17 ++
 .../grails-oauth-twitter/v4/snippets/MANIFEST.yml  |  43 +++++
 .../grails-oauth-twitter/v4/snippets/build.gradle  |  92 +++++++++
 .../v4/snippets/grails-app/conf/application.groovy |  68 +++++++
 .../grails-app/conf/spring/resources.groovy        |  16 ++
 .../controllers/demo/AuthController.groovy         |  62 ++++++
 .../controllers/demo/BookController.groovy         |  36 ++++
 .../demo/BookFavouriteController.groovy            |  46 +++++
 .../v4/snippets/grails-app/domain/demo/Book.groovy |  20 ++
 .../grails-app/domain/demo/BookFavourite.groovy    |  14 ++
 .../snippets/grails-app/init/demo/BootStrap.groovy | 115 +++++++++++
 .../services/demo/BookDataService.groovy           |  45 +++++
 .../services/demo/BookFavouriteDataService.groovy  |  17 ++
 .../grails-app/views/auth/_loginWithTwitter.gsp    |   4 +
 .../v4/snippets/grails-app/views/auth/success.gsp  |   6 +
 .../v4/snippets/grails-app/views/book/index.gsp    |  17 ++
 .../v4/snippets/grails-app/views/book/show.gsp     |  30 +++
 .../v4/snippets/grails-app/views/layouts/main.gsp  |  73 +++++++
 .../v4/snippets/grails-app/views/login/auth.gsp    |  17 ++
 .../main/groovy/demo/JwtCookieTokenReader.groovy   |  34 ++++
 guides/grails-oauth-twitter/v4/toc.yml             |  28 +++
 .../v4/guide/createCircleConfig.adoc               |  24 +++
 .../v4/guide/createGitHubRepo.adoc                 |  17 ++
 .../v4/guide/gettingStarted.adoc                   |  17 ++
 .../v4/guide/helpWithGrails.adoc                   |   1 +
 .../grails-on-circleci-basics/v4/guide/howto.adoc  |   1 +
 .../v4/guide/integrateCircle.adoc                  |  14 ++
 .../v4/guide/integrationTest.adoc                  |  10 +
 .../v4/guide/requirements.adoc                     |   1 +
 .../v4/guide/runTests.adoc                         |   4 +
 .../v4/guide/testLogging.adoc                      |  21 ++
 .../v4/guide/training.adoc                         |   1 +
 .../v4/guide/unitTest.adoc                         |   7 +
 .../v4/guide/wheretoGoFromHere.adoc                |   3 +
 .../v4/guide/writingTheApp.adoc                    |  48 +++++
 guides/grails-on-circleci-basics/v4/manifest.yml   |  22 +++
 .../v4/snippets/.circleci/config.yml               |  26 +++
 .../v4/snippets/MANIFEST.yml                       |  17 ++
 .../v4/snippets/build.gradle                       | 118 ++++++++++++
 .../v4/snippets/gradle.properties                  |   7 +
 .../example/grails/DefaultHomePageSpec.groovy      |  18 ++
 .../groovy/example/grails/UrlMappingsSpec.groovy   |  12 ++
 guides/grails-on-circleci-basics/v4/toc.yml        |  21 ++
 .../v4/guide/createGitHubRepo.adoc                 |   1 +
 .../v4/guide/gettingStarted.adoc                   |  12 ++
 .../v4/guide/helpWithGrails.adoc                   |   1 +
 .../grails-on-github-actions/v4/guide/howto.adoc   |   1 +
 .../v4/guide/integrateGithubActions.adoc           |  19 ++
 .../v4/guide/integrationTest.adoc                  |  14 ++
 .../v4/guide/requirements.adoc                     |   1 +
 .../v4/guide/runTests.adoc                         |   3 +
 .../v4/guide/testLogging.adoc                      |  21 ++
 .../v4/guide/training.adoc                         |   1 +
 .../v4/guide/unitTest.adoc                         |   7 +
 .../v4/guide/wheretoGoFromHere.adoc                |   1 +
 .../v4/guide/writingTheApp.adoc                    |  49 +++++
 guides/grails-on-github-actions/v4/manifest.yml    |  23 +++
 .../v4/snippets/.github/workflows/gradle.yml       |  31 +++
 .../v4/snippets/MANIFEST.yml                       |  19 ++
 .../v4/snippets/build.gradle                       | 118 ++++++++++++
 .../v4/snippets/gradle.properties                  |   7 +
 .../example/grails/DefaultHomePageSpec.groovy      |  17 ++
 .../groovy/example/grails/HomePage.groovy          |  16 ++
 .../groovy/example/grails/UrlMappingsSpec.groovy   |  12 ++
 guides/grails-on-github-actions/v4/toc.yml         |  20 ++
 .../v4/guide/gettingStarted.adoc                   |   3 +
 .../v4/guide/helpWithGrails.adoc                   |   1 +
 .../v4/guide/training.adoc                         |   1 +
 guides/grails-quickcast-logging/v4/manifest.yml    |  16 ++
 .../v4/snippets/MANIFEST.yml                       |   8 +
 guides/grails-quickcast-logging/v4/toc.yml         |   6 +
 .../v4/guide/gettingStarted.adoc                   |   1 +
 .../v4/guide/helpWithGrails.adoc                   |   1 +
 .../v4/guide/training.adoc                         |   1 +
 .../v4/guide/webinar.adoc                          |   3 +
 .../v4/manifest.yml                                |  17 ++
 .../v4/snippets/MANIFEST.yml                       |   8 +
 .../v4/toc.yml                                     |   6 +
 .../v4/guide/gettingStarted.adoc                   |   1 +
 .../v4/guide/helpWithGrails.adoc                   |   1 +
 .../v4/guide/training.adoc                         |   1 +
 .../grails-quickcasts-interceptors/v4/manifest.yml |  16 ++
 .../v4/snippets/MANIFEST.yml                       |   8 +
 guides/grails-quickcasts-interceptors/v4/toc.yml   |   6 +
 .../v4/guide/gettingStarted.adoc                   |   1 +
 .../v4/guide/helpWithGrails.adoc                   |   1 +
 .../v4/guide/training.adoc                         |   1 +
 .../grails-quickcasts-json-views/v4/manifest.yml   |  16 ++
 .../v4/snippets/MANIFEST.yml                       |   8 +
 guides/grails-quickcasts-json-views/v4/toc.yml     |   6 +
 .../v4/guide/gettingStarted.adoc                   |   1 +
 .../v4/guide/helpWithGrails.adoc                   |   1 +
 .../v4/guide/training.adoc                         |   1 +
 .../v4/manifest.yml                                |  16 ++
 .../v4/snippets/MANIFEST.yml                       |   8 +
 .../v4/toc.yml                                     |   6 +
 .../v4/guide/gettingStarted.adoc                   |   1 +
 .../v4/guide/helpWithGrails.adoc                   |   1 +
 .../v4/guide/training.adoc                         |   1 +
 .../v4/manifest.yml                                |  16 ++
 .../v4/snippets/MANIFEST.yml                       |   8 +
 .../v4/toc.yml                                     |   6 +
 .../v4/guide/bookAnalyticsRabbit.adoc              |  25 +++
 .../v4/guide/bookApplicationRabbit.adoc            |  36 ++++
 .../v4/guide/buildingAnalytics.adoc                |  42 ++++
 .../grails-rabbitmq/v4/guide/gettingStarted.adoc   |   2 +
 .../grails-rabbitmq/v4/guide/helpWithGrails.adoc   |   1 +
 guides/grails-rabbitmq/v4/guide/howto.adoc         |  24 +++
 guides/grails-rabbitmq/v4/guide/nextSteps.adoc     |   3 +
 .../v4/guide/originalAppGrails.adoc                |  62 ++++++
 guides/grails-rabbitmq/v4/guide/rabbitMQ.adoc      |   5 +
 .../grails-rabbitmq/v4/guide/rabbitManagement.adoc |  29 +++
 guides/grails-rabbitmq/v4/guide/requirements.adoc  |   1 +
 guides/grails-rabbitmq/v4/guide/running.adoc       |  54 ++++++
 guides/grails-rabbitmq/v4/guide/runningTheApp.adoc |   6 +
 guides/grails-rabbitmq/v4/guide/setupRabbit.adoc   |  49 +++++
 guides/grails-rabbitmq/v4/guide/training.adoc      |   1 +
 guides/grails-rabbitmq/v4/manifest.yml             |  16 ++
 guides/grails-rabbitmq/v4/snippets/MANIFEST.yml    |  35 ++++
 guides/grails-rabbitmq/v4/snippets/build.gradle    |  88 +++++++++
 .../grails-app/conf/application.yml                | 125 ++++++++++++
 .../grails-app/domain/demo/BookPageView.groovy     |  18 ++
 .../demo/BookPageViewConsumer.groovy               |  28 +++
 .../services/demo/BookPageViewDataService.groovy   |  35 ++++
 .../groovy/demo/BookPageViewDataServiceSpec.groovy |  36 ++++
 .../v4/snippets/grails-app/conf/application.yml    | 143 ++++++++++++++
 .../controllers/demo/BookController.groovy         |  20 ++
 .../controllers/demo/BookShowInterceptor.groovy    |  23 +++
 .../grails-app/controllers/demo/UrlMappings.groovy |  16 ++
 .../v4/snippets/grails-app/domain/demo/Book.groovy |  20 ++
 .../snippets/grails-app/init/demo/BootStrap.groovy | 115 +++++++++++
 .../services/demo/BookDataService.groovy           |  31 +++
 .../snippets/src/main/groovy/demo/BookImage.groovy |   9 +
 guides/grails-rabbitmq/v4/toc.yml                  |  24 +++
 .../v4/guide/concurrentExecution.adoc              |  22 +++
 .../grails-schwartz/v4/guide/createSimpleJob.adoc  |  71 +++++++
 .../grails-schwartz/v4/guide/gettingStarted.adoc   |   5 +
 .../grails-schwartz/v4/guide/helpWithGrails.adoc   |   1 +
 guides/grails-schwartz/v4/guide/howto.adoc         |   1 +
 guides/grails-schwartz/v4/guide/install.adoc       |  15 ++
 guides/grails-schwartz/v4/guide/logchanges.adoc    |  11 ++
 .../grails-schwartz/v4/guide/logicInService.adoc   |  30 +++
 guides/grails-schwartz/v4/guide/summary.adoc       |   3 +
 guides/grails-schwartz/v4/guide/training.adoc      |   1 +
 .../grails-schwartz/v4/guide/triggerManually.adoc  |  48 +++++
 guides/grails-schwartz/v4/guide/writing.adoc       |   0
 guides/grails-schwartz/v4/manifest.yml             |  18 ++
 guides/grails-schwartz/v4/snippets/MANIFEST.yml    |  29 +++
 guides/grails-schwartz/v4/snippets/build.gradle    |  93 +++++++++
 .../v4/snippets/grails-app/conf/logback.groovy     |  39 ++++
 .../snippets/grails-app/init/demo/BootStrap.groovy |  17 ++
 .../services/demo/DailyEmailJobService.groovy      |  26 +++
 .../grails-app/services/demo/EmailService.groovy   |  11 ++
 .../services/demo/FollowupEmailJobService.groovy   |  26 +++
 .../services/demo/GenerateInvoiceJobService.groovy |  42 ++++
 .../services/demo/GenerateInvoiceService.groovy    |  13 ++
 .../services/demo/HelloWorldJobService.groovy      |  35 ++++
 .../services/demo/RegisterService.groovy           |  47 +++++
 .../demo/todayat/DailyEmailJobService.groovy       |  43 +++++
 guides/grails-schwartz/v4/toc.yml                  |  16 ++
 .../grails-vs-nodejs/v4/guide/authentication.adoc  |  75 ++++++++
 guides/grails-vs-nodejs/v4/guide/datasource.adoc   |  40 ++++
 .../v4/guide/deleteFlavorsByUser.adoc              |  39 ++++
 guides/grails-vs-nodejs/v4/guide/deployment.adoc   |  17 ++
 .../grails-vs-nodejs/v4/guide/flavorsByUser.adoc   |  54 ++++++
 .../grails-vs-nodejs/v4/guide/gettingStarted.adoc  |  25 +++
 guides/grails-vs-nodejs/v4/guide/gorm.adoc         | 164 ++++++++++++++++
 guides/grails-vs-nodejs/v4/guide/grails.adoc       |  32 +++
 .../grails-vs-nodejs/v4/guide/grailsConsole.adoc   |  74 +++++++
 .../grails-vs-nodejs/v4/guide/helpWithGrails.adoc  |   1 +
 guides/grails-vs-nodejs/v4/guide/howto.adoc        |   1 +
 guides/grails-vs-nodejs/v4/guide/react.adoc        | 109 +++++++++++
 guides/grails-vs-nodejs/v4/guide/reactProfile.adoc |  81 ++++++++
 guides/grails-vs-nodejs/v4/guide/requirements.adoc |   1 +
 guides/grails-vs-nodejs/v4/guide/restServices.adoc |  31 +++
 .../grails-vs-nodejs/v4/guide/runningTheApp.adoc   |  33 ++++
 .../v4/guide/saveFlavorsByUser.adoc                |  39 ++++
 guides/grails-vs-nodejs/v4/guide/seedData.adoc     |  55 ++++++
 guides/grails-vs-nodejs/v4/guide/signup.adoc       |  66 +++++++
 guides/grails-vs-nodejs/v4/guide/ssl.adoc          |  41 ++++
 guides/grails-vs-nodejs/v4/guide/summary.adoc      |  14 ++
 guides/grails-vs-nodejs/v4/guide/training.adoc     |   1 +
 guides/grails-vs-nodejs/v4/guide/websockets.adoc   |  98 ++++++++++
 .../grails-vs-nodejs/v4/guide/writingTheApp.adoc   |   3 +
 guides/grails-vs-nodejs/v4/manifest.yml            |  20 ++
 guides/grails-vs-nodejs/v4/snippets/MANIFEST.yml   |  61 ++++++
 .../v4/snippets/client/package.json                |  24 +++
 .../grails-vs-nodejs/v4/snippets/client/src/App.js | 125 ++++++++++++
 .../v4/snippets/client/src/config.js               |   5 +
 .../v4/snippets/client/src/login.js                | 135 +++++++++++++
 .../v4/snippets/server/build.gradle                |  82 ++++++++
 .../server/grails-app/conf/application.yml         | 189 ++++++++++++++++++
 .../server/grails-app/conf/spring/resources.groovy |  12 ++
 .../controllers/demo/IceCreamController.groovy     |  74 +++++++
 .../controllers/demo/SignupCommand.groovy          |  13 ++
 .../controllers/demo/SignupController.groovy       |  46 +++++
 .../grails-app/controllers/demo/UrlMappings.groovy |  33 ++++
 .../server/grails-app/domain/demo/Role.groovy      |  24 +++
 .../server/grails-app/domain/demo/User.groovy      |  36 ++++
 .../server/grails-app/domain/demo/UserRole.groovy  |  87 +++++++++
 .../server/grails-app/init/demo/Application.groovy |  11 ++
 .../server/grails-app/init/demo/BootStrap.groovy   |  41 ++++
 .../services/demo/IceCreamService.groovy           |  87 +++++++++
 .../grails-app/services/demo/RoleService.groovy    |  42 ++++
 .../services/demo/UserIceCreamService.groovy       |  41 ++++
 .../services/demo/UserRoleService.groovy           |  27 +++
 .../grails-app/services/demo/UserService.groovy    |  47 +++++
 .../grails-app/views/iceCream/_icecream.gson       |  11 ++
 .../server/grails-app/views/iceCream/index.gson    |   7 +
 .../main/groovy/demo/CustomWebSocketConfig.groovy  |  23 +++
 .../groovy/demo/SessionExpirationJobHolder.groovy  |  41 ++++
 .../groovy/demo/TokenCreationEventListener.groovy  |  16 ++
 .../groovy/demo/UserPasswordEncoderListener.groovy |  41 ++++
 guides/grails-vs-nodejs/v4/toc.yml                 |  28 +++
 .../v4/guide/conclusion.adoc                       |   6 +
 .../v4/guide/evaluatingTheApp.adoc                 |  83 ++++++++
 .../v4/guide/excessiveGarbageCollection.adoc       |  53 +++++
 .../v4/guide/excessiveHeapMemory.adoc              |  57 ++++++
 .../v4/guide/gettingStarted.adoc                   |   6 +
 .../v4/guide/helpWithGrails.adoc                   |   1 +
 .../grails-yourkit-profiling/v4/guide/howto.adoc   |   1 +
 .../v4/guide/inefficientDelete.adoc                |  65 +++++++
 .../v4/guide/insertStudents.adoc                   |   5 +
 .../v4/guide/installYourKit.adoc                   |   8 +
 .../v4/guide/requirements.adoc                     |   1 +
 .../v4/guide/startProfiling.adoc                   |  23 +++
 .../v4/guide/training.adoc                         |   1 +
 .../v4/guide/yourKitBestFeatures.adoc              |  10 +
 guides/grails-yourkit-profiling/v4/manifest.yml    |  22 +++
 .../v4/snippets/MANIFEST.yml                       |  23 +++
 .../v4/snippets/build.gradle                       |  85 ++++++++
 .../controllers/demo/StudentController.groovy      |  46 +++++
 .../snippets/grails-app/domain/demo/Student.groovy |  13 ++
 .../services/demo/StudentDataService.groovy        |  18 ++
 .../grails-app/services/demo/StudentService.groovy |  75 ++++++++
 .../v4/snippets/grails-app/views/index.gsp         |  83 ++++++++
 .../demo/StudentServiceIntegrationSpec.groovy      |  51 +++++
 .../src/test/groovy/demo/StudentServiceSpec.groovy |  23 +++
 guides/grails-yourkit-profiling/v4/toc.yml         |  22 +++
 .../grails_url_mappings/v4/guide/conclusion.adoc   |   1 +
 .../grails_url_mappings/v4/guide/controllers.adoc  |  84 ++++++++
 .../v4/guide/creatingTheApp.adoc                   |  23 +++
 .../v4/guide/gettingStarted.adoc                   |   3 +
 .../v4/guide/helpWithGrails.adoc                   |   1 +
 guides/grails_url_mappings/v4/guide/howto.adoc     |   1 +
 .../grails_url_mappings/v4/guide/requirements.adoc |   1 +
 .../v4/guide/splitUrlMappings.adoc                 |  50 +++++
 guides/grails_url_mappings/v4/guide/testing.adoc   |  15 ++
 .../grails_url_mappings/v4/guide/urlMappings.adoc  | 158 +++++++++++++++
 guides/grails_url_mappings/v4/manifest.yml         |  16 ++
 .../grails_url_mappings/v4/snippets/MANIFEST.yml   |  21 ++
 .../controllers/demo/AgendaController.groovy       |  24 +++
 .../controllers/demo/ConferenceController.groovy   |  25 +++
 .../controllers/demo/ConferenceUrlMappings.groovy  |  13 ++
 .../controllers/demo/SpeakerController.groovy      |  24 +++
 .../controllers/demo/TalkController.groovy         |  24 +++
 .../grails-app/controllers/demo/UrlMappings.groovy |  16 ++
 .../groovy/demo/ConferenceUrlMappingsSpec.groovy   |  28 +++
 guides/grails_url_mappings/v4/toc.yml              |  18 ++
 guides/neo4j-movies/v4/guide/byTitleEndpoint.adoc  | 111 +++++++++++
 guides/neo4j-movies/v4/guide/configuration.adoc    |  26 +++
 guides/neo4j-movies/v4/guide/domainModel.adoc      |  49 +++++
 guides/neo4j-movies/v4/guide/endpoints.adoc        |  37 ++++
 guides/neo4j-movies/v4/guide/gettingStarted.adoc   |   5 +
 guides/neo4j-movies/v4/guide/graphEndpoint.adoc    |  30 +++
 guides/neo4j-movies/v4/guide/howto.adoc            |   1 +
 guides/neo4j-movies/v4/guide/requirements.adoc     |  26 +++
 guides/neo4j-movies/v4/guide/runningTheApp.adoc    |   7 +
 guides/neo4j-movies/v4/guide/searchEndpoint.adoc   |  61 ++++++
 guides/neo4j-movies/v4/guide/setupData.adoc        |  39 ++++
 guides/neo4j-movies/v4/guide/training.adoc         |   1 +
 guides/neo4j-movies/v4/guide/ui.adoc               |  25 +++
 guides/neo4j-movies/v4/guide/writingTheApp.adoc    |  10 +
 guides/neo4j-movies/v4/manifest.yml                |  19 ++
 guides/neo4j-movies/v4/snippets/MANIFEST.yml       |  31 +++
 guides/neo4j-movies/v4/snippets/build.gradle       |  75 ++++++++
 guides/neo4j-movies/v4/snippets/gradle.properties  |   4 +
 .../v4/snippets/grails-app/conf/application.yml    |  72 +++++++
 .../neo4j/movies/MovieController.groovy            |  32 +++
 .../controllers/neo4j/movies/UrlMappings.groovy    |  18 ++
 .../domain/neo4j/movies/CastMember.groovy          |  21 ++
 .../grails-app/domain/neo4j/movies/Movie.groovy    |  20 ++
 .../grails-app/domain/neo4j/movies/Person.groovy   |  19 ++
 .../services/neo4j/movies/MovieService.groovy      |  82 ++++++++
 .../v4/snippets/grails-app/views/movie/_cast.gson  |  10 +
 .../v4/snippets/grails-app/views/movie/_movie.gson |   9 +
 .../v4/snippets/grails-app/views/movie/search.gson |  10 +
 guides/neo4j-movies/v4/toc.yml                     |  19 ++
 guides/rest-mongodb/v4/guide/applyConstraints.adoc |  55 ++++++
 guides/rest-mongodb/v4/guide/configure.adoc        |   9 +
 guides/rest-mongodb/v4/guide/controller.adoc       |  22 +++
 guides/rest-mongodb/v4/guide/createData.adoc       |  24 +++
 guides/rest-mongodb/v4/guide/deleteDate.adoc       |  20 ++
 guides/rest-mongodb/v4/guide/domainClass.adoc      |  33 ++++
 guides/rest-mongodb/v4/guide/gettingStarted.adoc   |   1 +
 guides/rest-mongodb/v4/guide/helpWithGrails.adoc   |   1 +
 guides/rest-mongodb/v4/guide/howto.adoc            |  26 +++
 guides/rest-mongodb/v4/guide/json.adoc             |  62 ++++++
 guides/rest-mongodb/v4/guide/mapController.adoc    |  19 ++
 guides/rest-mongodb/v4/guide/readData.adoc         |  26 +++
 guides/rest-mongodb/v4/guide/requirements.adoc     |   2 +
 guides/rest-mongodb/v4/guide/runningTheApp.adoc    |   1 +
 guides/rest-mongodb/v4/guide/searchEndpoint.adoc   |  27 +++
 guides/rest-mongodb/v4/guide/testing.adoc          |  34 ++++
 guides/rest-mongodb/v4/guide/training.adoc         |   1 +
 guides/rest-mongodb/v4/guide/updateData.adoc       |  43 +++++
 guides/rest-mongodb/v4/guide/writingTheApp.adoc    |   1 +
 guides/rest-mongodb/v4/manifest.yml                |  20 ++
 guides/rest-mongodb/v4/snippets/MANIFEST.yml       |  25 +++
 guides/rest-mongodb/v4/snippets/build.gradle       |  82 ++++++++
 .../v4/snippets/grails-app/conf/application.yml    |  87 +++++++++
 .../controllers/demo/ProductController.groovy      |  31 +++
 .../grails-app/controllers/demo/UrlMappings.groovy |  27 +++
 .../snippets/grails-app/domain/demo/Product.groovy |  17 ++
 .../snippets/grails-app/views/object/_object.gson  |   5 +
 .../grails-app/views/product/_product.gson         |  12 ++
 .../test/groovy/demo/ProductControllerSpec.groovy  |  38 ++++
 .../src/test/groovy/demo/ProductSpec.groovy        |  50 +++++
 guides/rest-mongodb/v4/toc.yml                     |  24 +++
 660 files changed, 18901 insertions(+), 56 deletions(-)