sebastian

A flow-control library aimed at encouraging organized, testable code.

npm install sebastian
1 downloads in the last day
38 downloads in the last week
186 downloads in the last month

Sebastian

Intro

Sebastian is a flow control library aimed at encouraging developers to write organized, testable code. It works in the browser or with Node.js.

Rationale

There are many flow-control libraries out there, but none that I am quite satisfied with at the moment. Async is great, but I don't agree with Node.js-style callback conventions and I don't like mixing success and error condition logic. Also, I have found Async-wrapped code to be difficult to test. Sebastian is built to encourage construction of discrete chunks of manageable code that can be easily tested. I'm a big fan of Deferreds. Sebastian uses jQuery Deferred $.when() wrapper to treat asynchronous and synchronous steps/code the same.

Dependencies

  • For Node.js, jquery-deferred, but Q support may be added at a later date.
  • For browser environments, jQuery.

Documentation

For full documentation, check out the Sebastian GitHub page.

Getting started

To use as a Node.js module, install with NPM, or add as a dependency in your package.json.

npm install sebastian

Then, require the module and add a flow:

var flow = require("sebastian").flow;

flow("helloFlow")
    .step("one", function() {
        console.log("hello..");
    }).step("two", function() {
        console.log("hello 2..");
    }).begin();

This creates a flow called "helloFlow", adds to steps two the flow, and starts the flow.

To use with an AMD module loader (only tested w/ RequireJS):

    require(["jquery", "path/to/sebastian"], function($, sebastian) {

        //call the local definition
        sebastian.flow("blah")
                .step("one", function() {
                    console.log("step one..");
                })
                .step("two", function() {
                    console.log("step two..");
                })
                .begin();

    });

To use with old-school sequential script tags:

<script type="text/javascript" src="vendor/jquery/jquery.min.js"></script>
<script type="text/javascript" src="/sebastian.js"></script>

<script type="text/javascript">

    $.Flow("firstFlow")
            .step("one", function() {
                console.log("executing step one in firstFlow...");
            })
            .step("two", function() {
                console.log("executing step two in firstFlow...");
            }).begin();


</script>

Tests/Specs

npm loves you