Blog: Juan Vazquez
Twitter: @javazquez
Github: javazquez
@Grapes([
@Grab('io.ratpack:ratpack-groovy:1.1.1'),
@Grab('org.slf4j:slf4j-simple:1.7.12')
])
import static ratpack.groovy.Groovy.ratpack
ratpack {
handlers {
get {
render "Hello World!"
}
get(":name") {
render "Hello $pathTokens.name!"
}
}
}
// A handler that uses the API
public static class DeletingHandler extends InjectionHandler {
void handle(final Context context, final Datastore datastore) {
final int days = context.getPathTokens().asInt("days");
Blocking.get(() -> datastore.deleteOlderThan(days))
.then(i -> context.render(i + " records deleted"));
}
}
import ratpack.test.embed.EmbeddedApp;
import ratpack.exec.Promise;
import static org.junit.Assert.assertEquals;
public class Example {
public static void main(String... args) throws Exception {
EmbeddedApp.fromHandler(ctx ->
Promise.of((f) ->
new Thread(() -> f.success("hello world")).start()
).then(ctx::render)
).test(httpClient -> {
assertEquals("hello world", httpClient.getText());
});
}
}
> sdk install lazybones
> lazybones create <ratpack template> <ratpack version> <app name>
> lazybones create ratpack my-ratpack-app
> cd my-ratpack-app
> ./gradlew run
buildscript {
repositories {
jcenter()
}
dependencies {
classpath "io.ratpack:ratpack-gradle:1.1.1"
}
}
apply plugin: "io.ratpack.ratpack-groovy"
apply plugin: "idea"
repositories {
jcenter()
}
dependencies {
runtime "org.slf4j:slf4j-simple:1.7.12"
}
import static ratpack.groovy.Groovy.ratpack
ratpack {
handlers {
get {
render "Hello World!"
}
get(":name") {
render "Hello $pathTokens.name!"
}
}
}
>[main] INFO ratpack.server.RatpackServer - Starting server...
>[main] INFO ratpack.server.RatpackServer - Building registry...
>[main] INFO ratpack.server.RatpackServer - Initializing 2 services...
>[main] INFO ratpack.server.RatpackServer - Ratpack started(development)
for http://localhost:5050
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Accept registration</title>
</head>
<body>
<h1>Welcome @{{twitterHandle}}!</h1>
</body>
</html>
curl -d "message=Groovy is Gr8" \
http://localhost:5050/api/sendGroupMessage/javazquez
user javazquez says 'Groovy is Gr8'
Custom Error
prefix("api"){
//add a more specific api error handler rather than global SiteErrorHandler
register { add(ApiErrorHandler, new ApiErrorHandler()) }
post('sendGroupMessage/:user'){
def tokens = get(PathBinding).allTokens
parse(Form).then{ form ->
render "user ${tokens.user} says '${form.get('message')}'"
}
}