Pebble.kt

  1. package com.hexagontk.templates.pebble

  2. import com.hexagontk.templates.TemplatePort
  3. import io.pebbletemplates.pebble.PebbleEngine
  4. import io.pebbletemplates.pebble.loader.MemoryLoader
  5. import java.io.StringWriter
  6. import java.net.URL
  7. import java.util.*

  8. class Pebble(
  9.     private val cache: Boolean = true,
  10.     private val maxRenderedSize: Int = -1
  11. ) : TemplatePort {

  12.     private val engine: PebbleEngine = PebbleEngine.Builder()
  13.         .cacheActive(cache)
  14.         .maxRenderedSize(maxRenderedSize)
  15.         .build()

  16.     override fun render(url: URL, context: Map<String, *>, locale: Locale): String {
  17.         val writer = StringWriter()
  18.         val resource = url.file
  19.         engine.getTemplate(resource).evaluate(writer, context, locale)
  20.         return writer.toString()
  21.     }

  22.     override fun render(
  23.         name: String, templates: Map<String, String>, context: Map<String, *>, locale: Locale
  24.     ): String {

  25.         val writer = StringWriter()
  26.         val memoryLoader = MemoryLoader().apply {
  27.             templates.forEach { (k, v) -> addTemplate(k, v) }
  28.         }

  29.         PebbleEngine.Builder()
  30.             .cacheActive(cache)
  31.             .loader(memoryLoader)
  32.             .maxRenderedSize(maxRenderedSize)
  33.             .build()
  34.             .getTemplate(name)
  35.             .evaluate(writer, context, locale)

  36.         return writer.toString()
  37.     }
  38. }