work.flow - The asynchronous workflow library for Node
work.flow is an asynchronous workflow library for Node.
The current version is 0.0.0 and is still going through documentation and testing before development starts, Unless you are contributing, you should probably not be using this.
The purpose of work.flow is to provide a means of creating individual pieces of code that can be used to quickly create applications or data processing pipelines.
TLDR;
print-line.js
module . exports = work . flow . task . definition ( {
uri : ' incredi.co/games/worlds-fastest-game/print-line ' ,
properties : {
message : {
type : String ,
value : ' '
}
} ,
task : function ( options , complete ) {
var message = options . properties . message ;
console . log ( message ) ;
return complete ( null , message ) ;
}
} ) ;
ask-name.js
var util = require ( ' util ' ) ;
var work = require ( ' work.flow ' ) ;
var readline = require ( ' readline ' ) ;
var io = readline . createInterface ( {
input : process . stdin ,
output : process . stdout
} ) ;
module . exports = work . flow . task . definition ( {
uri : ' incredi.co/games/worlds-fastest-game/ask-name ' ,
properties : {
for : {
type : String ,
value : ' Buddy '
} ,
prompt : {
type : String ,
value : ' Hey %s, What is your name? ' ,
readOnly : true
}
} ,
task : function ( options , complete ) {
var prompt = util . format ( options . properties . prompt , options . properties . for ) ;
return io . question ( prompt , function ( name ) {
return complete ( null , name ) ;
} ) ;
}
} ) ;
ask-for-player-names.js
require ( ' ./ask-name ' ) ;
module . exports = work . flow . path . definition ( {
uri : ' incredi.co/games/worlds-fastest-game/paths/ask-for-player-names ' ,
start : [ {
name : ' player-one ' ,
uri : ' incredi.co/games/worlds-fastest-game/ask-name ' ,
properties : {
for : ' Player 1 '
}
} , {
name : ' player-two ' ,
uri : ' incredi.co/games/worlds-fastest-game/ask-name ' ,
properties : {
for : ' Player 2 '
}
} ] ,
timeout : 6000 ,
error : [ {
uri : ' work.flow/task/restart '
} ]
} ) ;
workflow.js
require ( ' ./print-line ' ) ;
require ( ' ./ask-for-player-names ' ) ;
module . exports = work . flow . definition ( {
name : ' worlds-fastest-game ' ,
uri : ' incredi.co/games/worlds-fastest-game ' ,
start : [ {
name : ' ask-names ' ,
uri : ' incredi.co/games/worlds-fastest-game/paths/ask-for-player-names '
} , {
name : ' determine-winner ' ,
uri : ' work.flow/task/if-then-else ' ,
properties : {
if : {
value : function ( options , callback ) {
return callback ( null , Math . round ( Math . random ( ) * ( 2 - 1 ) + 1 ) ) ;
} ,
equals : 1 ,
then : [ {
name : ' player-one-wins ' ,
uri : ' incredi.co/games/worlds-fastest-game/print-line ' ,
properties : {
message : ' {ask-names.player-one} WINS!!!! '
}
} ] ,
else : [ {
name : ' player-two-wins ' ,
uri : ' incredi.co/games/worlds-fastest-game/print-line ' ,
properties : {
message : ' {ask-names.player-two} WINS!!!! '
}
} ]
}
}
} , {
uri : ' work.flow/workflow/restart '
} ] ,
timeout : 6000 ,
error : [ {
uri : ' work.flow/workflow/restart '
} ]
} ) ;
index.js
var workflow = require ( ' ./workflow ' ) ;
workflow . run ( function ( err , context ) {
console . log ( ' MUAHAHAHAHAHAHAHAH ' ) ;
} ) ;
Installation
$ npm install work.flow --save
Development Scripts
Before running any development scripts, be sure to first install the dev modules.
$ npm install work.flow --save --dev
Build Documentation
Outputs code documentation files to the ./doc/api
folder.
Static Analysis
Outputs static analysis files to the ./doc/analysis
folder.
Test + Coverage
Outputs code coverage files to the ./doc/coverage
folder.