{"action":"published","release":{"url":"https://api.github.com/repos/google/FreeBuilder/releases/3101847","assets_url":"https://api.github.com/repos/google/FreeBuilder/releases/3101847/assets","upload_url":"https://uploads.github.com/repos/google/FreeBuilder/releases/3101847/assets{?name,label}","html_url":"https://github.com/google/FreeBuilder/releases/tag/v1.9","id":3101847,"tag_name":"v1.9","target_commitish":"master","name":"v1.9","draft":false,"author":{"login":"chrisalice","id":979369,"avatar_url":"https://avatars.githubusercontent.com/u/979369?v=3","gravatar_id":"","url":"https://api.github.com/users/chrisalice","html_url":"https://github.com/chrisalice","followers_url":"https://api.github.com/users/chrisalice/followers","following_url":"https://api.github.com/users/chrisalice/following{/other_user}","gists_url":"https://api.github.com/users/chrisalice/gists{/gist_id}","starred_url":"https://api.github.com/users/chrisalice/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/chrisalice/subscriptions","organizations_url":"https://api.github.com/users/chrisalice/orgs","repos_url":"https://api.github.com/users/chrisalice/repos","events_url":"https://api.github.com/users/chrisalice/events{/privacy}","received_events_url":"https://api.github.com/users/chrisalice/received_events","type":"User","site_admin":false},"prerelease":false,"created_at":"2016-04-26T15:37:47Z","published_at":"2016-04-26T17:01:56Z","assets":[{"url":"https://api.github.com/repos/google/FreeBuilder/releases/assets/1601868","id":1601868,"name":"freebuilder-1.9.jar","label":null,"uploader":{"login":"chrisalice","id":979369,"avatar_url":"https://avatars.githubusercontent.com/u/979369?v=3","gravatar_id":"","url":"https://api.github.com/users/chrisalice","html_url":"https://github.com/chrisalice","followers_url":"https://api.github.com/users/chrisalice/followers","following_url":"https://api.github.com/users/chrisalice/following{/other_user}","gists_url":"https://api.github.com/users/chrisalice/gists{/gist_id}","starred_url":"https://api.github.com/users/chrisalice/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/chrisalice/subscriptions","organizations_url":"https://api.github.com/users/chrisalice/orgs","repos_url":"https://api.github.com/users/chrisalice/repos","events_url":"https://api.github.com/users/chrisalice/events{/privacy}","received_events_url":"https://api.github.com/users/chrisalice/received_events","type":"User","site_admin":false},"content_type":"application/java-archive","state":"uploaded","size":10047794,"download_count":0,"created_at":"2016-04-26T16:59:43Z","updated_at":"2016-04-26T17:01:46Z","browser_download_url":"https://github.com/google/FreeBuilder/releases/download/v1.9/freebuilder-1.9.jar"}],"tarball_url":"https://api.github.com/repos/google/FreeBuilder/tarball/v1.9","zipball_url":"https://api.github.com/repos/google/FreeBuilder/zipball/v1.9","body":"This release adds map and mutate methods to builders when compiled with Java 8+ (issue #6), and allows builder classes to be declared abstract (#126).\r\n\r\nJava 8+'s lambda methods allow a more fluent approach to updating properties on a Builder. For example, to increment a property:\r\n\r\n```java\r\nPerson olderPerson = new Person.Builder()\r\n    .mergeFrom(person)\r\n    .mapAge(age -> age + 1)\r\n    .build();\r\n```\r\n\r\nTo delete part of a list:\r\n\r\n```java\r\npersonBuilder.mutateDescendants(d -> d.subList(3, 5).clear());\r\n```\r\n\r\nTo update part of a property with its own builder:\r\n\r\n```java\r\nprojectBuilder.mutateOwner(b -> b\r\n    .setName(\"Phil\")\r\n    .setDepartment(\"HR\"));\r\n```"}}