Notwithstanding Previous Misdemeanors

    preservative

    0.3.1 • Public • Published

    Preservative

    npm status build status dependency status coverage status experimental

    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 = require('preservative')(require('duel'), ['new', 'score']);
     
    var duel = new PreservedDuel(8); // 8 player duel tournament
    duel.score(duel.matches[0].id, [1,0]); // use duel API
    duel.score(duel.matches[1].id, [1,2]); // use duel API
     
    var preserve = duel.preserve();
    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.from(preserve); // 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 = require('preservative')(require('duel'), ['new', 'score'], { filterNoops: true });
    var duel = new PreservedDuel(4);
    var last = duel.matches[duel.matches.length-1];
    duel.score(last.id, [1,0]); // false
     
    duel.preserve(); // [ { type: 'new', args: [ 4, undefined ] } ]
     
    var first = duel.matches[0]
    duel.score(first.id, [1,0]); // true
    duel.preserve();
    [ { 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.

    Install

    npm i preservative

    DownloadsWeekly Downloads

    1

    Version

    0.3.1

    License

    MIT

    Last publish

    Collaborators

    • clux