# Liquid [![Hex.pm](https://img.shields.io/hexpm/v/liquid.svg)](https://hex.pm/packages/liquid) [![Hex.pm](https://img.shields.io/hexpm/dt/liquid.svg)](https://hex.pm/packages/liquid) [![Build Status](https://travis-ci.org/bettyblocks/liquid-elixir.svg?branch=master)](https://travis-ci.org/bettyblocks/liquid-elixir)
It's a templating library for Elixir.
Continuation of the fluid liquid conversion.
## Usage
Add the dependency to your mix file:
``` elixir
# mix.exs
defp deps do
[…,
{:liquid, "~> 0.2.0"}]
end
```
You can either start the application directly:
`Liquid.start`
Or start it with your application:
``` elixir
# mix.exs
def application do
[mod: {MyApp, []},
applications: […, :liquid]]
end
```
Compile a template from a string:
`template = Liquid.Template.parse("{% assign hello='hello' %}{{ hello }}{{world}}")`
Render the template with a keyword list representing the local variables:
`{ :ok, rendered, _ } = Liquid.Template.render(template, %{"world" => "world"})`
The tests should give a pretty good idea of the features implemented so far.
## Custom tags and filters
You can add your own filters and tags/blocks inside your project:
``` elixir
defmodule MyFilters do
def meaning_of_life(_), do: 42
def one(_), do: 1
end
defmodule ExampleTag do
def parse(%Liquid.Tag{}=tag, %Liquid.Template{}=context) do
{tag, context}
end
def render(_input, tag, context) do
number = tag.markup |> Integer.parse |> elem(0)
{["#{number - 1}"], context}
end
end
defmodule ExampleBlock do
def parse(b, p), do: { b, p }
end
```
and than include them in your `config.exs` file
``` elixir
config :liquid,
extra_filter_modules: [MyFilters],
extra_tags: %{minus_one: {ExampleTag, Liquid.Tag},
my_block: {ExampleBlock, Liquid.Block}}
```
Another option is to set up the tag using:
`Liquid.Registers.register("minus_one", MinusOneTag, Tag)` for tag
`Liquid.Registers.register("my_block", ExampleBlock, Liquid.Block)` same for blocks;
and for filters you should use
`Liquid.Filters.add_filters(MyFilters)`
## Missing Features
Feel free to add a bug report or pull request if you feel that anything is missing.
### todo
* Add full set of filters
* Implement table_row tag
* Fix empty check on arrays