Finitomata
El boilerplate de m谩quinas de estados basado en callbacks
ofrece un boilerplate para implementar m谩quinas de estados finitos, permitiendo centrarse en la l贸gica de negocio en lugar de la gesti贸n de procesos y la consistencia de las transiciones. Lee la descripci贸n de la m谩quina desde una cadena en sintaxis PlantUML (
:state_diagram
) o Mermaid (
:flowchart
), valida que sea consistente (un 煤nico estado inicial, uno o m谩s estados finales, sin estados hu茅rfanos) y genera un
GenServer
que se puede usar de forma independiente o dentro de un 谩rbol de supervisi贸n.
La m谩quina generada solo necesita un callback obligatorio,
on_transition/4
;
on_failure/3
,
on_enter/2
,
on_exit/2
,
on_terminate/1
y
on_timer/2
son opcionales con implementaciones por defecto razonables. Varias opciones ajustan su comportamiento:
timer:
para callbacks recurrentes,
auto_terminate:
para transicionar autom谩ticamente al estado final,
ensure_entry:
para reintentar una transici贸n hasta que tenga 茅xito,
hibernate:
,
cache_state:
y persistencia conectable (adaptadores ETS y DETS incluidos).
Infinitomata
, incluido en el mismo paquete, es una implementaci贸n distribuida aut贸noma basada en
:pg
para ejecutar las mismas m谩quinas en un cl煤ster.
Finitomata.ExUnit
ofrece un arn茅s de pruebas sin dependencias externas con
assert_transition/3
, aserciones de fallo y generaci贸n de eventos basada en propiedades.