mix pd.gen.model (PropertyDamage v0.2.0)

View Source

Generate a PropertyDamage model module.

Usage

mix pd.gen.model MyApp.TestModel

Options

--commands COMMANDS               Comma-separated list of command module names
--projection NAME                 State projection module name
--assertion-projections NAMES     Comma-separated list of assertion projection names

Examples

# Basic model
mix pd.gen.model MyApp.TestModel

# Model with commands specified
mix pd.gen.model MyApp.TestModel --commands CreateUser,UpdateUser,DeleteUser

# Full specification
mix pd.gen.model MyApp.TestModel \
  --commands CreateUser,UpdateUser,DeleteUser \
  --projection MyApp.Projections.ModelState \
  --assertion-projections BalanceChecker,AuditLog

Projections

All projections use PropertyDamage.Model.Projection and can:

  • Track state via apply/2
  • Define synchronous assertions via @trigger
  • Define temporal assertions via @poll_state

The command_sequence_projection is the primary projection used for command generation. The assertion_projections are additional projections for invariants and side tracking.