Skip to content

Commit

Permalink
Rough implementation of as a callback.
Browse files Browse the repository at this point in the history
  • Loading branch information
xavi- committed Jul 3, 2012
1 parent 7b99b80 commit 648784e
Show file tree
Hide file tree
Showing 4 changed files with 44 additions and 32 deletions.
41 changes: 23 additions & 18 deletions index.js
Expand Up @@ -43,15 +43,20 @@ function errInfo(step, paramIdx, paramName) {
return { name: step, paramIdx: paramIdx, paramName: paramName };
}
function StepObj(params, jumpTo, name) {
this._params = params;
this._jumpTo = jumpTo;
this.name = name;
var step = function() { return step.val.apply(step, arguments); };
step._params = params;
step._jumpTo = jumpTo;
step._name = name;

step.__proto__ = StepObj.prototype;

return step;
}
StepObj.prototype = {
val: function(name) {
var self = this, paramIdx = this._params.nextIdx();
return function(err, val) {
if(err) { return self._params.error(err, errInfo(self.name, paramIdx, name)); }
if(err) { return self._params.error(err, errInfo(self._name, paramIdx, name)); }

self._params.done(paramIdx, val);
}
Expand All @@ -60,29 +65,29 @@ StepObj.prototype = {
name = (name || "array");
var self = this, paramIdx = this._params.nextIdx();
var arrayVals = new ParamList(function(err) {
if(err) { return self._params.error(err, errInfo(self.name, paramIdx, err.step.name)); }
if(err) { return self._params.error(err, errInfo(self._name, paramIdx, err.step.name)); }

self._params.done(paramIdx, arrayVals.vals.slice(1));
});

// Handles arrays of zero length
process.nextTick(function() { arrayVals.checkPending(); });

return {
val: function(valName) {
valName = (valName || name + "(" + valIdx + ")");
var valIdx = arrayVals.nextIdx();
var arrayCB = function(valName) {
valName = (valName || name + "(" + valIdx + ")");
var valIdx = arrayVals.nextIdx();

return function(err, val) {
if(err) { return arrayVals.error(err, errInfo("", 0, valName)); }
return function(err, val) {
if(err) { return arrayVals.error(err, errInfo("", 0, valName)); }

arrayVals.done(valIdx, val);
};
},
syncVal: function(val, valName) {
this.val(valName)(null, val);
}
arrayVals.done(valIdx, val);
};
};
arrayCB.val = arrayCB;
arrayCB.syncVal = function(val, valName) {
this.val(valName)(null, val);
}
return arrayCB;
},
syncVal: function(val, name) {
this.val(name)(null, val);
Expand All @@ -92,7 +97,7 @@ StepObj.prototype = {

var chunks = [];
emitter.on('data', function (chunk) { chunks.push(chunk); });
emitter.on('error', function(err) { self._params.error(err, errInfo(self.name, paramIdx, name)); });
emitter.on('error', function(err) { self._params.error(err, errInfo(self._name, paramIdx, name)); });
emitter.on('end', function() { self._params.done(paramIdx, chunks); });
},
jumpTo: function(func, args) {
Expand Down
2 changes: 1 addition & 1 deletion test/basic-checks.js
Expand Up @@ -2,7 +2,7 @@ var assert = require("assert");

module.exports = {
save: function(stepObj, args) {
stepObj.data[stepObj.name] = { when: Date.now(), args: Array.prototype.slice.call(args) };
stepObj.data[stepObj._name] = { when: Date.now(), args: Array.prototype.slice.call(args) };
},
coverage: function(names) {
return function(data) {
Expand Down
15 changes: 9 additions & 6 deletions test/val.js
Expand Up @@ -13,13 +13,14 @@ vows.describe("Test `this.val`").addBatch({
check.save(this, arguments);

fs.readFile(__filename, 'utf8', this.val());
fs.readFile(__filename, 'utf8', this());
},
function capitalize(err, text) {
function capitalize(err, text1, text2) {
if(err) { throw err; }

check.save(this, arguments);

this.syncVal(text.toUpperCase());
this.syncVal(text1.toUpperCase());
},
function showIt(err, newText) {
if(err) { throw err; }
Expand All @@ -36,7 +37,9 @@ vows.describe("Test `this.val`").addBatch({
"steps called in order": check.order([ "readSelf", "capitalize", "showIt" ]),
"check file loaded": function(data) {
var testText = fs.readFileSync(__filename, 'utf8');
assert.equal(testText, data["capitalize"].args[1], "Text Loaded");
assert.equal(testText, data["capitalize"].args[1], "Text1 Loaded");
assert.equal(testText, data["capitalize"].args[2], "Text2 Loaded");
assert.equal(data["capitalize"].args[1], data["capitalize"].args[2], "Text1 does not equal Text2");
},
"check text is capitalize": function(data) {
assert.equal(data["capitalize"].args[1].toUpperCase(), data["showIt"].args[1], "Text Uppercased");
Expand All @@ -48,7 +51,7 @@ vows.describe("Test `this.val`").addBatch({
function calls() {
check.save(this, arguments);

var p1 = this.val(), p2 = this.val();
var p1 = this.val(), p2 = this();
setTimeout(function() { p1(null, 1); }, 0);
setTimeout(function() { p2(null, 2); }, 0);
},
Expand Down Expand Up @@ -76,7 +79,7 @@ vows.describe("Test `this.val`").addBatch({
function calls() {
check.save(this, arguments);

var p1 = this.val(), p2 = this.val();
var p1 = this.val(), p2 = this();
p1(null, 1);
p2(null, 2);
},
Expand Down Expand Up @@ -107,7 +110,7 @@ vows.describe("Test `this.val`").addBatch({
var p1 = this.val();
setTimeout(function() { p1(null, 1); }, 10);
this.syncVal(2);
var p3 = this.val();
var p3 = this();
setTimeout(function() { p3(null, 3); }, 0);
},
function results(err, one, two, three) {
Expand Down
18 changes: 11 additions & 7 deletions test/valArray.js
Expand Up @@ -17,14 +17,16 @@ vows.describe("Test `this.valArray`").addBatch({

check.save(this, arguments);

var files = this.valArray();
var files1 = this.valArray();
var files2 = this.valArray();
results.forEach(function (filename) {
if (/\.js$/.test(filename)) {
fs.readFile(__dirname + "/" + filename, 'utf8', files.val());
fs.readFile(__dirname + "/" + filename, 'utf8', files1.val());
fs.readFile(__dirname + "/" + filename, 'utf8', files2.val());
}
});
},
function showAll(err, files) {
function showAll(err, files1, files2) {
if(err) { throw err; }

check.save(this, arguments);
Expand All @@ -45,6 +47,8 @@ vows.describe("Test `this.valArray`").addBatch({

assert.deepEqual(data["readFiles"].args[1], dirListing);
assert.deepEqual(data["showAll"].args[1], dirResults);
assert.deepEqual(data["showAll"].args[2], dirResults);
assert.deepEqual(data["showAll"].args[1], data["showAll"].args[2]);
}
},
"test empty valArray": {
Expand Down Expand Up @@ -78,7 +82,7 @@ vows.describe("Test `this.valArray`").addBatch({
check.save(this, arguments);

var group = this.valArray();
var p1 = group.val(), p2 = group.val();
var p1 = group.val(), p2 = group();
p1(null, 1);
p2(null, 2);
},
Expand Down Expand Up @@ -109,7 +113,7 @@ vows.describe("Test `this.valArray`").addBatch({
var p1 = group.val();
setTimeout(function() { p1(null, 1); }, 10);
group.syncVal(2);
var p3 = group.val();
var p3 = group();
setTimeout(function() { p3(null, 3); }, 0);
},
function results(err, arr) {
Expand Down Expand Up @@ -142,11 +146,11 @@ vows.describe("Test `this.valArray`").addBatch({
var g1p1 = group1.val();
setTimeout(function() { g1p1(null, 1); }, 10);
group1.syncVal(2);
var g1p3 = group1.val();
var g1p3 = group1();
setTimeout(function() { g1p3(null, 3); }, 0);

var group2 = this.valArray();
var g2p1 = group2.val(), g2p2 = group2.val(), g2p3 = group2.val();
var g2p1 = group2.val(), g2p2 = group2(), g2p3 = group2.val();
setTimeout(function() { g2p1(null, "a"); }, 0);
setTimeout(function() { g2p2(null, "b"); }, 0);
setTimeout(function() { g2p3(null, "c"); }, 0);
Expand Down

0 comments on commit 648784e

Please sign in to comment.