Drop every reference to rocker templates
RIP. Rocker is cool, but do you know what's cooler? Not spending time porting templates from one language to another. I might look at rocker again in the future.
- Id
- ee981b1323c643ef0824f8eca4ee4a1250563465
- Author
- Caio
- Commit time
- 2019-01-13T14:28:26+01:00
Modified pom.xml
<lucene.version>7.6.0</lucene.version>
<junit.jupiter.version>5.3.2</junit.jupiter.version>
<resilience4j.version>0.13.2</resilience4j.version>
- <rocker.version>1.2.0</rocker.version>
- <rocker.javaVersion>${java.version}</rocker.javaVersion>
- <rocker.optimize>true</rocker.optimize>
</properties>
<dependencyManagement>
</dependency>
<dependency>
- <groupId>com.fizzed</groupId>
- <artifactId>rocker-runtime</artifactId>
- <version>${rocker.version}</version>
- </dependency>
-
- <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<configuration>
<verbose>false</verbose>
</configuration>
- </plugin>
- <plugin>
- <groupId>com.fizzed</groupId>
- <artifactId>rocker-maven-plugin</artifactId>
- <version>${rocker.version}</version>
- <executions>
- <execution>
- <id>generate-rocker-templates</id>
- <phase>generate-sources</phase>
- <goals>
- <goal>generate</goal>
- </goals>
- </execution>
- </executions>
</plugin>
</plugins>
</build>
Modified src/main/java/co/caio/cerberus/boot/WebController.java
import java.util.stream.Collectors;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.http.HttpStatus;
-import org.springframework.http.MediaType;
-import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
-import org.springframework.web.bind.annotation.ResponseBody;
-import org.springframework.web.bind.annotation.ResponseStatus;
import org.springframework.web.reactive.result.view.Rendering;
import org.springframework.web.server.ServerWebInputException;
import reactor.core.publisher.Mono;
private Map<String, String> baseModel =
Map.of(
"site_title", "gula.recipes",
- "page_title", "something",
"page_description", "",
"search_title", "Search 950+k Recipes",
"search_subtitle", "Find recipes, not ads",
var model = new HashMap<String, Object>(baseModel);
var startIdx = query.offset() + 1;
+ model.put("page_title", "Search Results");
model.put("pagination_start", startIdx);
model.put("pagination_end", results.recipes().size() + startIdx);
model.put("pagination_max", results.totalHits());
ServerWebInputException.class,
SearchParameterException.class
})
- @ResponseStatus(HttpStatus.BAD_REQUEST)
- @ResponseBody
- ResponseEntity<String> handleBadParameters(Exception ex) {
- return ResponseEntity.status(HttpStatus.BAD_REQUEST)
- .contentType(MediaType.TEXT_HTML)
- .body(views.index.template("Bad parameter: " + ex.getMessage()).render().toString());
+ Rendering handleBadParameters(Exception ex) {
+ // FIXME use a proper error view
+ return Rendering.view("index")
+ .model(baseModel)
+ .modelAttribute("page_title", "Error: bad parameter")
+ .status(HttpStatus.BAD_REQUEST)
+ .build();
}
@ExceptionHandler
- @ResponseBody
- ResponseEntity<String> handleTimeout(TimeoutException ex) {
- return ResponseEntity.status(HttpStatus.REQUEST_TIMEOUT)
- .contentType(MediaType.TEXT_HTML)
- .body(views.index.template("Timeout: " + ex.getMessage()).render().toString());
+ Rendering handleTimeout(TimeoutException ex) {
+ // FIXME use a proper error view
+ return Rendering.view("index")
+ .model(baseModel)
+ .modelAttribute("page_title", "Timeout")
+ .status(HttpStatus.REQUEST_TIMEOUT)
+ .build();
}
@ExceptionHandler
- @ResponseBody
- ResponseEntity<String> handleCircuitBreaker(CircuitBreakerOpenException ex) {
- return ResponseEntity.status(HttpStatus.SERVICE_UNAVAILABLE)
- .contentType(MediaType.TEXT_HTML)
- .body(views.index.template("Circuit Breaker: " + ex.getMessage()).render().toString());
+ Rendering handleCircuitBreaker(CircuitBreakerOpenException ex) {
+ // FIXME use a proper error view
+ return Rendering.view("index")
+ .model(baseModel)
+ .modelAttribute("page_title", "Circuit Breaker")
+ .status(HttpStatus.SERVICE_UNAVAILABLE)
+ .build();
}
@ExceptionHandler
- @ResponseBody
- ResponseEntity<String> handleUnknown(Exception ex) {
- var msg = ex.getMessage();
- return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR)
- .contentType(MediaType.TEXT_HTML)
- .body(views.index.template(msg != null ? msg : ex.toString()).render().toString());
+ Rendering handleUnknown(Exception ex) {
+ // FIXME use a proper error view
+ return Rendering.view("index")
+ .model(baseModel)
+ .modelAttribute("page_title", "Unknown Error")
+ .status(HttpStatus.INTERNAL_SERVER_ERROR)
+ .build();
}
}
Deleted src/main/java/views/index.rocker.html
-@args (String message)
-
-@views.main.template("Index") -> {
-<h1>Hello @message!</h1>
-}
Deleted src/main/java/views/main.rocker.html
-@args (String title, RockerBody content)
-
-<html>
-<head>
- <title>@title</title>
-</head>
-<body>
-@content
-</body>
-</html>
Deleted src/main/java/views/search.rocker.html
-@import co.caio.cerberus.model.SearchResult
-@args (SearchResult result)
-
-@views.main.template("Search") -> {
-<h1>Search results</h1>
-<div>
- Search matched @result.totalHits() recipes. Displaying the top @result.recipes().size():
- <ul>
- @for (srr: result.recipes()) {
- <li>
- <a href="@srr.crawlUrl()" title="Link to original @srr.name()">
- @srr.name() <small>(@srr.recipeId())</small>
- </a>
- </li>
- }
- </ul>
-</div>
-}