Packages

A flexible rule engine library for Elixir that allows you to define and execute business rules using JSON-based configurations.

Current section

Files

Jump to
excanon lib rule.ex
Raw

lib/rule.ex

defmodule Rule do
@moduledoc false
@enforce_keys [:name, :description, :conditions, :actions]
defstruct [:name, :description, :conditions, :actions]
@type t() :: %__MODULE__{
name: String.t(),
description: String.t(),
conditions: map(),
actions: list(map())
}
def new!(%{"name" => name}) when not is_binary(name),
do: raise(ArgumentError, "Name field is required")
def new!(%{"description" => description}) when not is_binary(description),
do: raise(ArgumentError, "Description field is required")
def new!(%{"conditions" => conditions}) when not is_map(conditions),
do: raise(ArgumentError, "Conditions field is required")
def new!(%{"actions" => actions}) when not is_list(actions),
do: raise(ArgumentError, "Actions field is required")
def new!(%{
"name" => name,
"description" => description,
"conditions" => conditions,
"actions" => actions
}) do
%Rule{name: name, description: description, conditions: conditions, actions: actions}
end
end