An open API service indexing awesome lists of open source software.

https://github.com/sake92/mill-hepek

Mill plugin for rendering Scala objects to files
https://github.com/sake92/mill-hepek

Last synced: over 1 year ago
JSON representation

Mill plugin for rendering Scala objects to files

Awesome Lists containing this project

README

          

# mill-hepek

[![Maven Central](https://maven-badges.herokuapp.com/maven-central/ba.sake/mill-hepek/badge.svg)](https://maven-badges.herokuapp.com/maven-central/ba.sake/mill-hepek)

Mill plugin for writing Scala `object`s to files.
See also [**hepek**](https://github.com/sake92/hepek), static content generator that builds upon this plugin.

## Installation

Add the following to your `build.sc`:

```scala
import $ivy.`ba.sake::mill-hepek::0.0.2`
import mill._
import mill.scalalib._
import ba.sake.millhepek.MillHepekModule

object site extends MillHepekModule with ScalaModule {
def scalaVersion = ...
}
```

Then you can run `./mill site.hepek`

## Usage

When you run `./mill site.hepek` it will:
1. write all `object .. extends Renderable` from the `files` package to `site/hepek_output` folder
1. copy all files from `src/resources/public` to `hepek_output` folder
1. write static accessors for `src/resources/public` files, so you don't have to type them with strings and make silly mistakes

Minimal example:

```scala
package files // mandatory !!

import java.nio.file.Paths
import ba.sake.hepek.core.Renderable

object RenderMe extends Renderable {

// access `src/resources/public` files through autogenerated files.
override def render =
"Some text" // arbitrary Scala code

override def relPath =
Paths.get("renderme.txt")
}
```

When you run `./mill site.hepek`, you'll find the `site/hepek_output/renderme.txt` file,
with text `Some text`.

---

## Examples
- [sake.ba website source]([https://github.com/sake92/hepek-examples](https://github.com/sake92/sake-ba-source))
- [examples](https://github.com/sake92/hepek-examples)
- ["Philosophy"](https://dev.to/sake_92/render-static-site-from-scala-code)

---

## Fun fact
I think that this is the first project that tried this approach, using first-class Scala `object`s for this kind of stuff.
Correct me if I'm wrong... ^_^

---

## About the name

A "hepek" in Bosnian language is a jargon for a thing/thingy/stuff...
It is used when we don't know the name of a thing: "Give me that ... *hepek*".
Also, it is used in the famous show called "Top lista nadrealista" as a name for an advanced device which calms down situations of various kinds.