Comparing version 0.0.1 to 0.0.4
136
dist/man.js
@@ -13,7 +13,6 @@ var man = (function (module) { | ||
for: function () { | ||
var self = this, | ||
for: function (items) { | ||
var self = this; | ||
if (arguments.length > 1) { | ||
items = Array.prototype.slice.call(arguments, 0); | ||
if (items.length === 1 && Array.isArray(items[0])) { | ||
items = items[0]; | ||
} | ||
@@ -29,15 +28,3 @@ self._items = items; | ||
context = { | ||
index: i, | ||
done: function () { | ||
var index = this.index, | ||
args = Array.prototype.slice.call(arguments, 0); | ||
if (args.length < 2) { | ||
args = args[0]; | ||
} | ||
self._results[index] = args; | ||
self._completed++; | ||
if (self._items.length === self._completed) { | ||
self._thenHandler(self._results); | ||
} | ||
} | ||
done: self._getDone(i) | ||
}; | ||
@@ -50,7 +37,28 @@ handler.call(context, item); | ||
then: function (handler) { | ||
var self = this; | ||
var self = this, | ||
isReady = self._results.length > 0 && | ||
(self._results.length === self._completed); | ||
self._thenHandler = handler; | ||
if (isReady) { | ||
self._thenHandler(self._results); | ||
} | ||
return self; | ||
}, | ||
_getDone: function (i) { | ||
var self = this; | ||
return function () { | ||
var index = i, | ||
args = Array.prototype.slice.call(arguments, 0); | ||
if (args.length < 2) { | ||
args = args[0]; | ||
} | ||
self._results[index] = args; | ||
self._completed++; | ||
if (self._items.length === self._completed) { | ||
self._thenHandler(self._results); | ||
} | ||
}; | ||
}, | ||
}; | ||
@@ -143,3 +151,3 @@ | ||
var self = this, | ||
args = Array.prototype.slice.call(arguments, 0) | ||
args = Array.prototype.slice.call(arguments, 0), | ||
handler = self._handlers[++self._current]; | ||
@@ -159,6 +167,5 @@ if (!handler) { | ||
self._results = []; | ||
self._handler = null; | ||
self._currentItem = 0; | ||
self._current = 0; | ||
self._then; | ||
self.done = self.done.bind(self); | ||
self._thenHandler = function () {}; | ||
}; | ||
@@ -168,7 +175,6 @@ | ||
for: function () { | ||
var self = this, | ||
for: function (items) { | ||
var self = this; | ||
if (arguments.length > 1) { | ||
items = Array.prototype.slice.call(arguments, 0); | ||
if (items.length === 1 && Array.isArray(items[0])) { | ||
items = items[0]; | ||
} | ||
@@ -181,25 +187,20 @@ self._items = items; | ||
var self = this; | ||
if (self._handler) { return; } | ||
self._handler = handler; | ||
self._handler.call(self, self._items[0]); | ||
self._currentItem++; | ||
self._handler.call(self, self._items[self._current]); | ||
return self; | ||
}, | ||
done: function () { | ||
var self = this, | ||
args = Array.prototype.slice.call(arguments, 0), | ||
item = self._items[self._currentItem]; | ||
if (args.length < 2) { | ||
args = args[0]; | ||
} | ||
self._results[self._currentItem - 1] = args; | ||
if (!item) { | ||
self._thenHandler(self._results); | ||
done: function (result) { | ||
var self = this; | ||
self._results.push(result); | ||
var isReady = self._results.length > 0 | ||
&& (self._results.length === self._items.length); | ||
if (isReady) { | ||
if (self._then) { | ||
self._then(self._results); | ||
} | ||
return; | ||
} | ||
self._handler.call(self, item); | ||
self._currentItem++; | ||
self._current++; | ||
self._handler.call(self, self._items[self._current]); | ||
}, | ||
@@ -209,39 +210,11 @@ | ||
var self = this; | ||
self._thenHandler = handler; | ||
return self; | ||
self._then = handler; | ||
var isReady = self._results.length > 0 | ||
&& (self._results.length === self._items.length); | ||
if (isReady) { | ||
handler(self._results); | ||
} | ||
}, | ||
}; | ||
var NamesMan = function () { | ||
var self = this; | ||
self.handlers = {}; | ||
}; | ||
NamesMan.prototype = { | ||
get: function (name) { | ||
var self = this; | ||
self[name] = function (handler) { | ||
self.on(name, handler); | ||
}; | ||
return function () { | ||
var args = Array.prototype.slice.call(arguments, 0), | ||
handlers = self.handlers[name] || []; | ||
handlers.forEach(function (handler) { | ||
handler.apply(null, args); | ||
}); | ||
}; | ||
}, | ||
on: function (name, handler) { | ||
var self = this; | ||
self.handlers[name] = self.handlers[name] || []; | ||
self.handlers[name].push(handler); | ||
}, | ||
}; | ||
var ParallelMan = function () { | ||
@@ -333,3 +306,3 @@ var self = this; | ||
m = new ListMan(); | ||
m.for.apply(m, args) | ||
m.for.apply(m, args); | ||
return m; | ||
@@ -342,11 +315,6 @@ }, | ||
m = new AsyncListMan(); | ||
m.for.apply(m, args) | ||
m.for.apply(m, args); | ||
return m; | ||
}, | ||
names: function () { | ||
var self = this; | ||
return new NamesMan(); | ||
}, | ||
}; | ||
@@ -353,0 +321,0 @@ |
@@ -1,1 +0,1 @@ | ||
var man=function(a){var b=function(){var a=this;a._items=null,a._completed=0,a._results=[],a._thenHandler=function(){}};b.prototype={"for":function(){var a=this,b=Array.prototype.slice.call(arguments,0);return 1===b.length&&Array.isArray(b[0])&&(b=b[0]),a._items=b,a},"do":function(a){for(var b=this,c=0;b._items.length>c;c++){var d=b._items[c],e={index:c,done:function(){var a=this.index,c=Array.prototype.slice.call(arguments,0);2>c.length&&(c=c[0]),b._results[a]=c,b._completed++,b._items.length===b._completed&&b._thenHandler(b._results)}};a.call(e,d)}return b},then:function(a){var b=this;return b._thenHandler=a,b}};var c=function(){var a=this;a._count=0,a._completed=0,a._results=[],a._doneHandlers=[],a._onHandlers=[]};c.prototype={get callback(){var a=this,b=a._count;return a._count++,function(){a._completed++,a._results[b]=2>arguments.length?arguments[0]:arguments,a._handleOn(Array.prototype.slice.call(arguments,0)),a._count===a._completed&&a._handleDone()}},done:function(a){var b=this;return b._doneHandlers.push(a),0!==b._count&&b._count===b._completed&&a.apply(null,b._results),b},on:function(a){var b=this;return b._onHandlers.push(a),b},_handleDone:function(){var a=this;a._doneHandlers.forEach(function(b){b.apply(null,a._results)})},_handleOn:function(a){var b=this;b._onHandlers.forEach(function(b){b.apply(null,a)})}};var d=function(){var a=this;a._handlers=[],a._current=0,a._args=null,a.next=a.next.bind(a)};d.prototype={"do":function(a){var b=this;return 0===b._handlers.length&&a.call(b),b._handlers.push(a),b._args&&(a.apply(b,b._args),b._args=null),b},next:function(){var a=this,b=Array.prototype.slice.call(arguments,0);return(handler=a._handlers[++a._current])?(handler.apply(a,b),void 0):(a._args=b,void 0)}};var b=function(){var a=this;a._items=null,a._results=[],a._handler=null,a._currentItem=0,a.done=a.done.bind(a),a._thenHandler=function(){}};b.prototype={"for":function(){var a=this,b=Array.prototype.slice.call(arguments,0);return 1===b.length&&Array.isArray(b[0])&&(b=b[0]),a._items=b,a},"do":function(a){var b=this;if(!b._handler)return b._handler=a,b._handler.call(b,b._items[0]),b._currentItem++,b},done:function(){var a=this,b=Array.prototype.slice.call(arguments,0),c=a._items[a._currentItem];return 2>b.length&&(b=b[0]),a._results[a._currentItem-1]=b,c?(a._handler.call(a,c),a._currentItem++,void 0):(a._thenHandler(a._results),void 0)},then:function(a){var b=this;return b._thenHandler=a,b}};var e=function(){var a=this;a.handlers={}};e.prototype={get:function(a){var b=this;return b[a]=function(c){b.on(a,c)},function(){var c=Array.prototype.slice.call(arguments,0),d=b.handlers[a]||[];d.forEach(function(a){a.apply(null,c)})}},on:function(a,b){var c=this;c.handlers[a]=c.handlers[a]||[],c.handlers[a].push(b)}};var f=function(){var a=this;a._count=0,a._results=[],a._processed=0,a._doneHandlers=[],a._onHandlers=[]};return f.prototype={"do":function(a){var b=this,c=b._count;return b._count++,a.call({done:function(){var a=c,d=Array.prototype.slice.call(arguments,0);2>d.length&&(d=d[0]),b._results[a]=d,b._processed++,b._handleOn(d),b._count===b._processed&&b._handleDone()}}),b},on:function(a){var b=this;return b._onHandlers.push(a),b},then:function(a){var b=this;return b._doneHandlers.push(a),b},_handleOn:function(a){var b=this;Array.isArray(a)||(a=[a]),b._onHandlers.forEach(function(b){b.apply(null,a)})},_handleDone:function(){var b=this;b._doneHandlers.forEach(function(a){a.apply(null,b._results)})}},a={callback:function(){return new c},"do":function(a){var c=new d;return c.do(a),c},doAsync:function(a){var c=new f;return c.do(a),c},"for":function(){var c=Array.prototype.slice.call(arguments,0),d=new b;return d.for.apply(d,c),d},forAsync:function(){var b=Array.prototype.slice.call(arguments,0),c=new AsyncListMan;return c.for.apply(c,b),c},names:function(){return new e}}}({}); | ||
var man=function(n){var t=function(){var n=this;n._items=null,n._completed=0,n._results=[],n._thenHandler=function(){}};t.prototype={"for":function(n){var t=this;return arguments.length>1&&(n=Array.prototype.slice.call(arguments,0)),t._items=n,t},"do":function(n){for(var t=this,e=0;e<t._items.length;e++){var r=t._items[e],l={done:t._getDone(e)};n.call(l,r)}return t},then:function(n){var t=this,e=t._results.length>0&&t._results.length===t._completed;return t._thenHandler=n,e&&t._thenHandler(t._results),t},_getDone:function(n){var t=this;return function(){var e=n,r=Array.prototype.slice.call(arguments,0);r.length<2&&(r=r[0]),t._results[e]=r,t._completed++,t._items.length===t._completed&&t._thenHandler(t._results)}}};var e=function(){var n=this;n._count=0,n._completed=0,n._results=[],n._doneHandlers=[],n._onHandlers=[]};e.prototype={get callback(){var n=this,t=n._count;return n._count++,function(){n._completed++,n._results[t]=arguments.length<2?arguments[0]:arguments,n._handleOn(Array.prototype.slice.call(arguments,0)),n._count===n._completed&&n._handleDone()}},done:function(n){var t=this;return t._doneHandlers.push(n),0!==t._count&&t._count===t._completed&&n.apply(null,t._results),t},on:function(n){var t=this;return t._onHandlers.push(n),t},_handleDone:function(){var n=this;n._doneHandlers.forEach(function(t){t.apply(null,n._results)})},_handleOn:function(n){var t=this;t._onHandlers.forEach(function(t){t.apply(null,n)})}};var r=function(){var n=this;n._handlers=[],n._current=0,n._args=null,n.next=n.next.bind(n)};r.prototype={"do":function(n){var t=this;return 0===t._handlers.length&&n.call(t),t._handlers.push(n),t._args&&(n.apply(t,t._args),t._args=null),t},next:function(){var n=this,t=Array.prototype.slice.call(arguments,0),e=n._handlers[++n._current];return e?(e.apply(n,t),void 0):(n._args=t,void 0)}};var t=function(){var n=this;n._items=null,n._results=[],n._current=0,n._then,n.done=n.done.bind(n)};t.prototype={"for":function(n){var t=this;return arguments.length>1&&(n=Array.prototype.slice.call(arguments,0)),t._items=n,t},"do":function(n){var t=this;return t._handler=n,t._handler.call(t,t._items[t._current]),t},done:function(n){var t=this;t._results.push(n);var e=t._results.length>0&&t._results.length===t._items.length;return e?(t._then&&t._then(t._results),void 0):(t._current++,t._handler.call(t,t._items[t._current]),void 0)},then:function(n){var t=this;t._then=n;var e=t._results.length>0&&t._results.length===t._items.length;e&&n(t._results)}};var l=function(){var n=this;n._count=0,n._results=[],n._processed=0,n._doneHandlers=[],n._onHandlers=[]};return l.prototype={"do":function(n){var t=this,e=t._count;return t._count++,n.call({done:function(){var n=e,r=Array.prototype.slice.call(arguments,0);r.length<2&&(r=r[0]),t._results[n]=r,t._processed++,t._handleOn(r),t._count===t._processed&&t._handleDone()}}),t},on:function(n){var t=this;return t._onHandlers.push(n),t},then:function(n){var t=this;return t._doneHandlers.push(n),t},_handleOn:function(n){var t=this;Array.isArray(n)||(n=[n]),t._onHandlers.forEach(function(t){t.apply(null,n)})},_handleDone:function(){var n=this;n._doneHandlers.forEach(function(t){t.apply(null,n._results)})}},n={callback:function(){return new e},"do":function(n){var t=new r;return t.do(n),t},doAsync:function(n){var t=new l;return t.do(n),t},"for":function(){var n=Array.prototype.slice.call(arguments,0),e=new t;return e.for.apply(e,n),e},forAsync:function(){var n=Array.prototype.slice.call(arguments,0),t=new AsyncListMan;return t.for.apply(t,n),t}}}({}); |
@@ -11,7 +11,6 @@ var ListMan = function () { | ||
for: function () { | ||
var self = this, | ||
for: function (items) { | ||
var self = this; | ||
if (arguments.length > 1) { | ||
items = Array.prototype.slice.call(arguments, 0); | ||
if (items.length === 1 && Array.isArray(items[0])) { | ||
items = items[0]; | ||
} | ||
@@ -27,15 +26,3 @@ self._items = items; | ||
context = { | ||
index: i, | ||
done: function () { | ||
var index = this.index, | ||
args = Array.prototype.slice.call(arguments, 0); | ||
if (args.length < 2) { | ||
args = args[0]; | ||
} | ||
self._results[index] = args; | ||
self._completed++; | ||
if (self._items.length === self._completed) { | ||
self._thenHandler(self._results); | ||
} | ||
} | ||
done: self._getDone(i) | ||
}; | ||
@@ -48,9 +35,30 @@ handler.call(context, item); | ||
then: function (handler) { | ||
var self = this; | ||
var self = this, | ||
isReady = self._results.length > 0 && | ||
(self._results.length === self._completed); | ||
self._thenHandler = handler; | ||
if (isReady) { | ||
self._thenHandler(self._results); | ||
} | ||
return self; | ||
}, | ||
_getDone: function (i) { | ||
var self = this; | ||
return function () { | ||
var index = i, | ||
args = Array.prototype.slice.call(arguments, 0); | ||
if (args.length < 2) { | ||
args = args[0]; | ||
} | ||
self._results[index] = args; | ||
self._completed++; | ||
if (self._items.length === self._completed) { | ||
self._thenHandler(self._results); | ||
} | ||
}; | ||
}, | ||
}; | ||
module.exports = ListMan; |
@@ -32,3 +32,3 @@ var CallbackMan = require('./callback'), | ||
m = new ListMan(); | ||
m.for.apply(m, args) | ||
m.for.apply(m, args); | ||
return m; | ||
@@ -41,11 +41,6 @@ }, | ||
m = new AsyncListMan(); | ||
m.for.apply(m, args) | ||
m.for.apply(m, args); | ||
return m; | ||
}, | ||
names: function () { | ||
var self = this; | ||
return new NamesMan(); | ||
}, | ||
}; |
@@ -26,3 +26,3 @@ var LineMan = function () { | ||
var self = this, | ||
args = Array.prototype.slice.call(arguments, 0) | ||
args = Array.prototype.slice.call(arguments, 0), | ||
handler = self._handlers[++self._current]; | ||
@@ -29,0 +29,0 @@ if (!handler) { |
@@ -5,6 +5,5 @@ var ListMan = function () { | ||
self._results = []; | ||
self._handler = null; | ||
self._currentItem = 0; | ||
self._current = 0; | ||
self._then; | ||
self.done = self.done.bind(self); | ||
self._thenHandler = function () {}; | ||
}; | ||
@@ -14,7 +13,6 @@ | ||
for: function () { | ||
var self = this, | ||
for: function (items) { | ||
var self = this; | ||
if (arguments.length > 1) { | ||
items = Array.prototype.slice.call(arguments, 0); | ||
if (items.length === 1 && Array.isArray(items[0])) { | ||
items = items[0]; | ||
} | ||
@@ -27,25 +25,20 @@ self._items = items; | ||
var self = this; | ||
if (self._handler) { return; } | ||
self._handler = handler; | ||
self._handler.call(self, self._items[0]); | ||
self._currentItem++; | ||
self._handler.call(self, self._items[self._current]); | ||
return self; | ||
}, | ||
done: function () { | ||
var self = this, | ||
args = Array.prototype.slice.call(arguments, 0), | ||
item = self._items[self._currentItem]; | ||
if (args.length < 2) { | ||
args = args[0]; | ||
} | ||
self._results[self._currentItem - 1] = args; | ||
if (!item) { | ||
self._thenHandler(self._results); | ||
done: function (result) { | ||
var self = this; | ||
self._results.push(result); | ||
var isReady = self._results.length > 0 | ||
&& (self._results.length === self._items.length); | ||
if (isReady) { | ||
if (self._then) { | ||
self._then(self._results); | ||
} | ||
return; | ||
} | ||
self._handler.call(self, item); | ||
self._currentItem++; | ||
self._current++; | ||
self._handler.call(self, self._items[self._current]); | ||
}, | ||
@@ -55,8 +48,11 @@ | ||
var self = this; | ||
self._thenHandler = handler; | ||
return self; | ||
self._then = handler; | ||
var isReady = self._results.length > 0 | ||
&& (self._results.length === self._items.length); | ||
if (isReady) { | ||
handler(self._results); | ||
} | ||
}, | ||
}; | ||
module.exports = ListMan; |
{ | ||
"name": "man", | ||
"version": "0.0.1", | ||
"version": "0.0.4", | ||
"description": "Provides a series of helper functions that allow you to perform asynchronous iteration and flow control.", | ||
@@ -20,2 +20,2 @@ "main": "./lib/index.js", | ||
"license": "BSD" | ||
} | ||
} |
@@ -57,32 +57,8 @@ var test = require('tap').test, | ||
test('man.for()', function (t) { | ||
man.doAsync(function () { | ||
var done = this.done, | ||
results = []; | ||
man.for(1, 2, 3, 4, 5).do(function (number) { | ||
var done = this.done; | ||
setTimeout(function () { | ||
results.push(number + 1); | ||
t.equal(results.length, number); | ||
done(number + 1); | ||
}, 50); | ||
}).then(function (results) { | ||
t.equivalent(results, [2, 3, 4, 5, 6]); | ||
done(); | ||
}); | ||
}).do(function () { | ||
var done = this.done, | ||
results = []; | ||
man.for([1, 2, 3, 4, 5]).do(function (number) { | ||
var done = this.done; | ||
setTimeout(function () { | ||
results.push(number + 1); | ||
t.equal(results.length, number); | ||
done(number + 1); | ||
}, 50); | ||
}).then(function (results) { | ||
t.equivalent(results, [2, 3, 4, 5, 6]); | ||
done(); | ||
}); | ||
}).then(function () { | ||
test('man.for() sync', function (t) { | ||
var results = []; | ||
man.for([1, 2, 3, 4, 5]).do(function (item) { | ||
this.done(item + 1); | ||
}).then(function (results) { | ||
t.equivalent(results, [2, 3, 4, 5, 6]); | ||
t.end(); | ||
@@ -92,28 +68,56 @@ }); | ||
test('man.forAsync()', function (t) { | ||
man.doAsync(function () { | ||
test('man.for() args', function (t) { | ||
var results = []; | ||
man.for(1, 2, 3, 4, 5).do(function (item) { | ||
this.done(item + 1); | ||
}).then(function (results) { | ||
t.equivalent(results, [2, 3, 4, 5, 6]); | ||
t.end(); | ||
}); | ||
}); | ||
test('man.for() delayed', function (t) { | ||
var results = []; | ||
man.for([1, 2, 3, 4, 5]).do(function (item) { | ||
var done = this.done; | ||
man.for(1, 2, 3, 4, 5).do(function (number) { | ||
var done = this.done; | ||
setTimeout(function () { | ||
done(number + 1); | ||
}, 50); | ||
}).then(function (results) { | ||
t.equivalent(results, [2, 3, 4, 5, 6]); | ||
done(); | ||
}); | ||
}).do(function () { | ||
setTimeout(function () { | ||
done(item + 1); | ||
}, 50); | ||
}).then(function (results) { | ||
t.equivalent(results, [2, 3, 4, 5, 6]); | ||
t.end(); | ||
}); | ||
}); | ||
test('man.forAsync() sync', function (t) { | ||
var results = []; | ||
man.forAsync([1, 2, 3, 4, 5]).do(function (item) { | ||
this.done(item + 1); | ||
}).then(function (results) { | ||
t.equivalent(results, [2, 3, 4, 5, 6]); | ||
t.end(); | ||
}); | ||
}); | ||
test('man.forAsync() args', function (t) { | ||
var results = []; | ||
man.forAsync(1, 2, 3, 4, 5).do(function (item) { | ||
this.done(item + 1); | ||
}).then(function (results) { | ||
t.equivalent(results, [2, 3, 4, 5, 6]); | ||
t.end(); | ||
}); | ||
}); | ||
test('man.forAsync() delayed', function (t) { | ||
var results = []; | ||
man.forAsync([1, 2, 3, 4, 5]).do(function (item) { | ||
var done = this.done; | ||
man.for([1, 2, 3, 4, 5]).do(function (number) { | ||
var done = this.done; | ||
setTimeout(function () { | ||
done(number + 1); | ||
}, 50); | ||
}).then(function (results) { | ||
t.equivalent(results, [2, 3, 4, 5, 6]); | ||
done(); | ||
}); | ||
}).then(function () { | ||
setTimeout(function () { | ||
done(item + 1); | ||
}, 50); | ||
}).then(function (results) { | ||
t.equivalent(results, [2, 3, 4, 5, 6]); | ||
t.end(); | ||
}); | ||
}); |
16
698
27866