Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/jeromegn/kilt
Generic template interface for Crystal
https://github.com/jeromegn/kilt
Last synced: 9 days ago
JSON representation
Generic template interface for Crystal
- Host: GitHub
- URL: https://github.com/jeromegn/kilt
- Owner: jeromegn
- License: mit
- Created: 2016-02-14T17:52:54.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2022-06-01T22:13:15.000Z (over 2 years ago)
- Last Synced: 2024-08-01T17:36:34.701Z (3 months ago)
- Language: Crystal
- Size: 30.3 KB
- Stars: 152
- Watchers: 8
- Forks: 13
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-crystal - Kilt - Abstraction layer for template engines (Template Engine)
- awesome-crystal - Kilt - Abstraction layer for template engines (Template Engine)
- awesome-crystal - Kilt - Abstraction layer for template engines (Template Engine)
README
# Kilt [![Build Status](https://travis-ci.org/jeromegn/kilt.svg?branch=master)](https://travis-ci.org/jeromegn/kilt)
Generic templating interface for Crystal.
## Goal
Simplify developers' lives by abstracting template rendering for multiple template languages.
## Supported out of the box
| Language | File extensions | Required libraries | Maintainer |
| -------- | --------------- | ------------------ | ---------- |
| ECR | .ecr | none (part of the stdlib) | |
| Mustache | .mustache | [crustache](https://github.com/MakeNowJust/crustache) | [@MakeNowJust](https://github.com/MakeNowJust) |
| Slang | .slang | [slang](https://github.com/jeromegn/slang) | [@jeromegn](https://github.com/jeromegn) |
| Temel | .temel | [temel](https://github.com/f/temel) | [@f](https://github.com/f) |
| Crikey | .crikey | [crikey](https://github.com/domgetter/crikey) | [@domgetter](https://github.com/domgetter) |
| Liquid | .liquid | [liquid](https://github.com/TechMagister/liquid.cr) | [@docelic](https://github.com/docelic) |
| Jbuilder | .jbuilder | [jbuilder](https://github.com/shootingfly/jbuilder) | [@shootingfly](https://github.com/shootingfly) |
| Water | .water | [water](https://github.com/shootingfly/water) | [@shootingfly](https://github.com/shootingfly) |See also:
[Registering your own template engine](#registering-your-own-template-engine).## Installation
Add this to your application's `shard.yml`:
```yaml
dependencies:
kilt:
github: jeromegn/kilt# Any other template languages Crystal shard
```## Usage
- Kilt essentially adds two macros `Kilt.embed` and `Kilt.file`, the code is really simple.
- Add template language dependencies, as listed in the support table above.Both macros take a `filename` and a `io_name` (the latter defaults to `"__kilt_io__"`)
### Example
```crystal
require "kilt"# For slang, add:
require "kilt/slang"# With a Class
class YourView
Kilt.file("path/to/template.ecr") # Adds a to_s method
end
puts YourView.new.to_s # =># Embedded
str = Kilt.render "path/to/template.slang"
# or
str = String.build do |__kilt_io__|
Kilt.embed "path/to/template.slang"
endputs str # =>
```## Registering your own template engine
Use `Kilt.register_engine(extension, embed_command)` macro:
```crystal
require "kilt"module MyEngine
macro embed(filename, io_name)
# ....
end
endKilt.register_engine("myeng", MyEngine.embed)
```This can be part of your own `my-engine` library: in this case it should depend
on `kilt` directly, or this could be a part of adapter library, like:
`kilt-my-engine`, which will depend on both `kilt` and `my-engine`.## Contributing
Please contribute your own "adapter" if you create a template language for Crystal that's not yet supported here!
1. Fork it ( https://github.com/jeromegn/kilt/fork )
2. Create your feature branch (git checkout -b my-awesome-template-language)
3. Commit your changes (git commit -am 'Add my-awesome-template-language')
4. Push to the branch (git push origin my-awesome-template-language)
5. Create a new Pull Request## Contributors
- [jeromegn](https://github.com/jeromegn) Jerome Gravel-Niquet - creator, maintainer
- [waterlink](https://github.com/waterlink) Oleksii Fedorov
- [MakeNowJust](https://github.com/MakeNowJust) TSUYUSATO Kitsune
- [f](https://github.com/f) Fatih Kadir Akın