Packages

A simple to use, simple to extend rules engine, written in Elixir.

Current section

Files

Jump to
rul_ex lib operands.ex
Raw

lib/operands.ex

defmodule RulEx.Operands do
@moduledoc false
@comparison_atoms [:=, :!=, :<, :>, :<=, :>=]
@comparison_strings Enum.map(@comparison_atoms, &Atom.to_string/1)
@comparison_operands @comparison_atoms ++ @comparison_strings
@value_atom [:val]
@value_string ["val"]
@value_operands @value_atom ++ @value_string
@variable_atom [:var]
@variable_string ["var"]
@variable_operands @variable_atom ++ @variable_string
@nested_exprs_atoms [:|, :&, :!, :in]
@nested_exprs_strings Enum.map(@nested_exprs_atoms, &Atom.to_string/1)
@nested_exprs @nested_exprs_atoms ++ @nested_exprs_strings
@reserved_atoms @nested_exprs_atoms ++ @comparison_atoms ++ @value_atom ++ @variable_atom
@reserved_strings @nested_exprs_strings ++
@comparison_strings ++ @value_string ++ @variable_string
@reserved @reserved_atoms ++ @reserved_strings
@doc false
def reserved, do: @reserved
@doc false
def reserved_atoms, do: @reserved_atoms
@doc false
def reserved_strings, do: @reserved_strings
@doc false
def comparison, do: @comparison_operands
@doc false
def comparison_atoms, do: @comparison_atoms
@doc false
def comparison_strings, do: @comparison_strings
@doc false
def value, do: @value_operands
@doc false
def value_atoms, do: @value_atom
@doc false
def value_strings, do: @value_string
@doc false
def variable, do: @variable_operands
@doc false
def variable_atoms, do: @variable_atom
@doc false
def variable_strings, do: @variable_string
@doc false
def nested, do: @nested_exprs
@doc false
def nested_atoms, do: @nested_exprs_atoms
@doc false
def nested_strings, do: @nested_exprs_strings
@doc false
def rename(op) when op in @reserved_strings, do: String.to_existing_atom(op)
def rename(any), do: any
end