Preservative
This module allows you to replay scenarios from state machines whose interface is a single class. Advantageous to serializing and saving internal state as a JSON blob because not only do you get full revision history, but also append-only history which is nice for replication.
Usage
Attach a state machine of your choice, and pass in the operations that changes the state of the class. Here we use duel tournaments as a reference state machine class.
var PreservedDuel = 'new' 'score'; var duel = 8; // 8 player duel tournamentduel; // use duel APIduel; // use duel API var preserve = duel;preserve; type: 'new' args: 8 undefined type: 'score' args: s: 1 r: 1 m: 1 1 0 undefined type: 'score' args: s: 1 r: 1 m: 2 1 2 undefined var duel = PreservedDuel; // same as original duel before .preserve();
Options
If the underlying state machine returns boolean whether or not the operation was allowed, preservative can filter out the calls that were disallowed.
var PreservedDuel = 'new' 'score' filterNoops: true ;var duel = 4;var last = duelmatchesduelmatcheslength-1;duel; // false duel; // [ { type: 'new', args: [ 4, undefined ] } ] var first = duelmatches0duel; // trueduel; type: 'new' args: 4 undefined type: 'score' args: s: 1 r: 1 m: 1 1 0 undefined
By using ignoreNoops
, you only get the part of history that mattered.
Installation
Install locally from npm
$ npm install preservative --save
Running tests
Install development dependencies
$ npm install
Run the tests
$ npm test
License
MIT-Licensed. See LICENSE file for details.