Version 1.3.0
Released on 2016-04-19.
“Learning Ratpack”, the impending and definitive resource for those wanting to dig deeper into Ratpack, will be based on 1.3.
In addition to internal performance improvements and bug fixes, this release updates dependency versions and adds several new features.
The following dependencies have been updated:
- Netty 4.1.0.CR6 (ratpack-core)
- Groovy 2.4.6 (ratpack-groovy, ratpack-groovy-test)
- RxJava 1.1.2 (ratpack-rx)
- Hystrix 1.5.1 (ratpack-hystrix)
This release also adds a dependency on Caffeine 2.2.6, a high performance caching library.
The new include()
method in the Groovy script DSL allows conveniently composing an application out of discrete scripts.
The new Promise.time()
method allows recording how long it takes to produce a promised value, while the new Promise.close()
method makes it more convenient dispose of a resource used to produce a promised value. The Promise.of()
and Promise.ofLazy()
methods have been deprecated in this release, replaced with Promise.async()
and Promise.sync()
respectively.
The ratpack.server.Service
type has been deprecated in favor of the new ratpack.service.Service
type. Additionally, it is now possible to accurately order dependent services via the new DependsOn
and ServiceDependencies
classes. Ratpack now starts and stops services in parallel, respecting dependencies.
This release also restores support for Gradle's continuous build, with Gradle 2.13 and on.
Breaking Changes
The default health check renderer now emits a 503
status code if any check was unhealthy.
The Promise.wiretap()
method was fixed to also capture failure results.
The serialized session form has changed in this release. This may cause session reads to fail for cookies that were set with earlier Ratpack versions. Future versions of Ratpack will handle this situation more gracefully. Please see issue #945 for the status of this issue, and workarounds that can be applied in the meantime.
Links
Pull Requests (7)
- [954] - Add when() and onlyIf() taking a closure and a class to GroovyChain. (erdi)
- [953] - Update Groovy to 2.4.6 (erdi)
- [936] - add jwt pac4j test (gschrader)
- [935] - Allow ordering services. (ldaley)
- [915] - Support protocol relative redirects (beckje01)
- [911] - Include additional Groovy scripts into Ratpack.groovy (johnrengelman)
- [908] - Timed Methods with asynchronous return types should count async completion time (fromanator)
Resolved Issues (21)
- [956] - Ratpack should start in development mode when launched from the IDEA debugger
- [955] - Actions passed to Promise.wiretap() and Operation.wiretap() are not executed if the promise/operation result in an error.
- [952] - Update Groovy to 2.4.6
- [949] - Terminating client side session should also remove last access token cookie
- [948] - Serialized form of session data should use only JDK types
- [947] - Session should not be marked dirty if a remove(key) is called when there is no entry for key
- [943] - Unable to use Kryo as custom Java serializer because core types require constructors
- [938] - Cookies set by a Handler should be accessible from a RequestFixture result
- [933] - Introduce Caffeine as a core dependency and use for caches
- [932] - Add a method to Promise for timing the fulfilment of promises
- [931] - Better promise factory method names
- [917] - NPE raised by NettyHandlerAdapter#isIgnorableException
- [912] - HealthCheckHandler should respond with status code 503 when unhealthy
- [910] - DefaultRedirector does not handle locations starting with \\ properly
- [904] - Add promise utility methods for resource open/close management
- [892] - GroovyChain is missing overloads for when() taking a closure and an chain action class and onlyIf() taking a closure and a handler class
- [883] - Allow specifying order of service setup/teardown
- [878] - Consider using last modified timestamp instead of comparing the whole app script for each request when detecting changes
- [872] - Typo in guide
- [838] - Add include() method to Ratpack.Groovy that allows composing the DSL
- [790] - Add Promise.flatMapError()