@@ -0,0 +1,1085 @@
+package gql.ratpack.exec;%0A%0Aimport java.util.concurrent.CompletableFuture;%0Aimport java.util.function.Supplier;%0A%0Aimport ratpack.exec.Execution;%0A%0A/**%0A * Creates instances of %7B@link CompletableFuture%7D honoring Ratpack's executors%0A *%0A * @since 0.1.0%0A */%0Apublic class Futures %7B%0A%0A  /**%0A   * Creates a %7B@link CompletableFuture%7D using the blocking executor%0A   *%0A   * @param supplier code providing a value%0A   * @return a blocking instance of %7B@link CompletableFuture%7D%0A   * @since 0.1.0%0A   */%0A  public static %3CT%3E CompletableFuture%3CT%3E blocking(Supplier%3CT%3E supplier) %7B%0A    return CompletableFuture.supplyAsync(supplier, Execution.current().getController().getBlockingExecutor());%0A  %7D%0A%0A  /**%0A   * Creates a %7B@link CompletableFuture%7D using the non blocking executor (event loop)%0A   *%0A   * @param supplier code providing a value%0A   * @return a non blocking instance of %7B@link CompletableFuture%7D%0A   * @since 0.1.0%0A   */%0A  public static %3CT%3E CompletableFuture%3CT%3E async(Supplier%3CT%3E supplier) %7B%0A    return CompletableFuture.supplyAsync(supplier, Execution.current().getController().getExecutor());%0A  %7D%0A%7D%0A%0A

Add integration between CompletableFuture and Ratpack's execution model