defmodule Tablex do
@moduledoc """
Tablex implements Decision Table. Its goal is to make domain rules easy to maintain.
"""
defdelegate decide(table, args), to: Tablex.Decider
defdelegate decide(table, args, opts), to: Tablex.Decider
@doc """
Create a new table.
## Example
Tablex.new(\"""
F value || color
1 >90 || red
2 80..90 || orange
3 20..79 || green
4 <20 || blue
\""")
"""
@spec new(String.t(), keyword()) :: Tablex.Table.t() | Tablex.Parser.parse_error()
def new(content, opts \\ []) when is_binary(content) do
content
|> String.trim_trailing()
|> Tablex.Parser.parse(opts)
end
if Version.compare(System.version(), "1.15.0-dev") in [:eq, :gt] do
@doc """
The same as `new/2`.
## Example
~RULES\"""
F value || color
1 >90 || red
2 80..90 || orange
3 20..79 || green
4 <20 || blue
\"""
"""
@spec sigil_RULES(String.t(), keyword()) :: Tablex.Table.t()
def sigil_RULES(content, opts) do
new(content, opts)
end
end
end