simply-deferred
Advanced tools
Comparing version 2.1.0 to 2.2.0
@@ -278,2 +278,12 @@ // Generated by CoffeeScript 1.6.3 | ||
}); | ||
it('should soak up extraneous promises', function() { | ||
var def, promise; | ||
def = new deferred.Deferred(); | ||
promise = def.promise().promise(); | ||
assertIsPromise(promise); | ||
promise.done(function(arg) { | ||
return assert.equal(arg, 42); | ||
}); | ||
return def.resolve(42); | ||
}); | ||
return describe('when', function() { | ||
@@ -327,3 +337,3 @@ it('should return a promise', function() { | ||
}); | ||
return it('should pass on arrays of arguments when used with multiple deferreds', function(done) { | ||
it('should special case single or no arguments when using multiple deferreds', function(done) { | ||
var after_all, d1, d2, d3; | ||
@@ -335,4 +345,4 @@ d1 = new deferred.Deferred(); | ||
after_all.done(function(arg1, arg2, arg3) { | ||
assert.deepEqual(arg1, [42]); | ||
assert.deepEqual(arg2, []); | ||
assert.equal(arg1, 42); | ||
assert.equal(arg2, void 0); | ||
assert.deepEqual(arg3, ['abc', 123]); | ||
@@ -345,2 +355,12 @@ return done(); | ||
}); | ||
it('should handle non promise arguments', function() { | ||
return deferred.when(1, 2, 42).done(function(arg1, arg2, arg3) { | ||
assert.equal(arg1, 1); | ||
assert.equal(arg2, 2); | ||
return assert.equal(arg3, 42); | ||
}); | ||
}); | ||
return it('should handle zero arguments', function(done) { | ||
return deferred.when().done(done); | ||
}); | ||
}); | ||
@@ -347,0 +367,0 @@ }); |
// Generated by CoffeeScript 1.6.3 | ||
(function() { | ||
var Deferred, PENDING, REJECTED, RESOLVED, VERSION, after, execute, flatten, has, installInto, isArguments, wrap, _when, | ||
var Deferred, PENDING, REJECTED, RESOLVED, VERSION, after, execute, flatten, has, installInto, isArguments, isPromise, wrap, _when, | ||
__slice = [].slice; | ||
VERSION = '2.1.0'; | ||
VERSION = '2.2.0'; | ||
@@ -22,2 +22,6 @@ PENDING = "pending"; | ||
isPromise = function(obj) { | ||
return has(obj, 'promise') && typeof (obj != null ? obj.promise : void 0) === 'function'; | ||
}; | ||
flatten = function(array) { | ||
@@ -71,5 +75,2 @@ if (isArguments(array)) { | ||
var close, closingArguments, doneCallbacks, failCallbacks, state; | ||
this.isPromise = function() { | ||
return true; | ||
}; | ||
state = PENDING; | ||
@@ -115,3 +116,3 @@ doneCallbacks = []; | ||
filteredArgs = filter.apply(null, args); | ||
if (has(filteredArgs, 'isPromise') && filteredArgs.isPromise()) { | ||
if (isPromise(filteredArgs)) { | ||
return filteredArgs[source](function() { | ||
@@ -140,2 +141,7 @@ var args; | ||
candidate.then = pipe; | ||
if (candidate.promise == null) { | ||
candidate.promise = function() { | ||
return candidate; | ||
}; | ||
} | ||
return candidate; | ||
@@ -171,25 +177,27 @@ }; | ||
var def, defs, finish, resolutionArgs, trigger, _i, _len; | ||
defs = flatten(arguments); | ||
trigger = new Deferred(); | ||
defs = flatten(arguments); | ||
if (defs.length === 1) { | ||
defs[0].done(function() { | ||
return trigger.resolve.apply(trigger, arguments); | ||
}); | ||
} else { | ||
resolutionArgs = []; | ||
finish = after(defs.length, function() { | ||
return trigger.resolve.apply(trigger, resolutionArgs); | ||
}); | ||
defs.forEach(function(def, index) { | ||
if (!defs.length) { | ||
return trigger.resolve().promise(); | ||
} | ||
resolutionArgs = []; | ||
finish = after(defs.length, function() { | ||
return trigger.resolve.apply(trigger, resolutionArgs); | ||
}); | ||
defs.forEach(function(def, index) { | ||
if (isPromise(def)) { | ||
return def.done(function() { | ||
var args; | ||
args = 1 <= arguments.length ? __slice.call(arguments, 0) : []; | ||
resolutionArgs[index] = args; | ||
resolutionArgs[index] = args.length > 1 ? args : args[0]; | ||
return finish(); | ||
}); | ||
}); | ||
} | ||
} else { | ||
resolutionArgs[index] = def; | ||
return finish(); | ||
} | ||
}); | ||
for (_i = 0, _len = defs.length; _i < _len; _i++) { | ||
def = defs[_i]; | ||
def.fail(trigger.reject); | ||
isPromise(def) && def.fail(trigger.reject); | ||
} | ||
@@ -196,0 +204,0 @@ return trigger.promise(); |
@@ -1,1 +0,1 @@ | ||
!function(){var n,r,e,t,u,a,l,i,o,s,c,f,p,g=[].slice;u="2.1.0",r="pending",t="resolved",e="rejected",o=function(n,r){return null!=n?n.hasOwnProperty(r):void 0},c=function(n){return o(n,"length")&&o(n,"callee")},i=function(n){return c(n)?i(Array.prototype.slice.call(n)):Array.isArray(n)?n.reduce(function(n,r){return Array.isArray(r)?n.concat(i(r)):(n.push(r),n)},[]):[n]},a=function(n,r){return 0>=n?r():function(){return--n<1?r.apply(this,arguments):void 0}},f=function(n,r){return function(){var e;return e=[n].concat(Array.prototype.slice.call(arguments,0)),r.apply(this,e)}},l=function(n,r,e){var t,u,a,l,o;for(l=i(n),o=[],u=0,a=l.length;a>u;u++)t=l[u],o.push(t.call.apply(t,[e].concat(g.call(r))));return o},n=function(){var u,a,s,c,f;return this.isPromise=function(){return!0},f=r,s=[],c=[],a={},this.promise=function(u){var p,h;return u=u||{},u.state=function(){return f},h=function(n,e){return function(){return f===r&&e.push.apply(e,i(arguments)),n()&&l(arguments,a),u}},u.done=h(function(){return f===t},s),u.fail=h(function(){return f===e},c),u.always=function(){var n;return(n=u.done.apply(u,arguments)).fail.apply(n,arguments)},p=function(r,e){var t,a;return t=new n,a=function(n,r,e){return e?u[n](function(){var t,u;return t=1<=arguments.length?g.call(arguments,0):[],u=e.apply(null,t),o(u,"isPromise")&&u.isPromise()?u[n](function(){var n;return n=1<=arguments.length?g.call(arguments,0):[],r.apply(null,n)}):r(u)}):u[n](function(){var n;return n=1<=arguments.length?g.call(arguments,0):[],r.apply(null,n)})},a("done",t.resolve,r),a("fail",t.reject,e),t},u.pipe=p,u.then=p,u},this.promise(this),u=function(n,e,t){return function(){return f===r&&(f=n,a=arguments,l(e,a,t)),this}},this.resolve=u(t,s),this.reject=u(e,c),this.resolveWith=function(){var n,r;return r=arguments[0],n=2<=arguments.length?g.call(arguments,1):[],u(t,s,r).apply(null,n)},this.rejectWith=function(){var n,r;return r=arguments[0],n=2<=arguments.length?g.call(arguments,1):[],u(e,c,r).apply(null,n)},this},p=function(){var r,e,t,u,l,o,s;for(l=new n,e=i(arguments),1===e.length?e[0].done(function(){return l.resolve.apply(l,arguments)}):(u=[],t=a(e.length,function(){return l.resolve.apply(l,u)}),e.forEach(function(n,r){return n.done(function(){var n;return n=1<=arguments.length?g.call(arguments,0):[],u[r]=n,t()})})),o=0,s=e.length;s>o;o++)r=e[o],r.fail(l.reject);return l.promise()},s=function(r){return r.Deferred=function(){return new n},r.ajax=f(r.ajax,function(r,e){var t,u,a,l;return null==e&&(e={}),u=new n,t=function(n,r){return f(n,function(){var n,e;return e=arguments[0],n=2<=arguments.length?g.call(arguments,1):[],e&&e.apply(null,n),r.apply(null,n)})},e.success=t(e.success,u.resolve),e.error=t(e.error,u.reject),l=r(e),a=u.promise(),a.abort=function(){return l.abort()},a}),r.when=p},"undefined"!=typeof exports?(exports.Deferred=function(){return new n},exports.when=p,exports.installInto=s):(this.Deferred=function(){return new n},this.Deferred.when=p,this.Deferred.installInto=s)}.call(this); | ||
!function(){var n,r,e,t,u,a,l,o,i,s,c,f,p,g,h=[].slice;u="2.2.0",r="pending",t="resolved",e="rejected",i=function(n,r){return null!=n?n.hasOwnProperty(r):void 0},c=function(n){return i(n,"length")&&i(n,"callee")},f=function(n){return i(n,"promise")&&"function"==typeof(null!=n?n.promise:void 0)},o=function(n){return c(n)?o(Array.prototype.slice.call(n)):Array.isArray(n)?n.reduce(function(n,r){return Array.isArray(r)?n.concat(o(r)):(n.push(r),n)},[]):[n]},a=function(n,r){return 0>=n?r():function(){return--n<1?r.apply(this,arguments):void 0}},p=function(n,r){return function(){var e;return e=[n].concat(Array.prototype.slice.call(arguments,0)),r.apply(this,e)}},l=function(n,r,e){var t,u,a,l,i;for(l=o(n),i=[],u=0,a=l.length;a>u;u++)t=l[u],i.push(t.call.apply(t,[e].concat(h.call(r))));return i},n=function(){var u,a,i,s,c;return c=r,i=[],s=[],a={},this.promise=function(u){var p,g;return u=u||{},u.state=function(){return c},g=function(n,e){return function(){return c===r&&e.push.apply(e,o(arguments)),n()&&l(arguments,a),u}},u.done=g(function(){return c===t},i),u.fail=g(function(){return c===e},s),u.always=function(){var n;return(n=u.done.apply(u,arguments)).fail.apply(n,arguments)},p=function(r,e){var t,a;return t=new n,a=function(n,r,e){return e?u[n](function(){var t,u;return t=1<=arguments.length?h.call(arguments,0):[],u=e.apply(null,t),f(u)?u[n](function(){var n;return n=1<=arguments.length?h.call(arguments,0):[],r.apply(null,n)}):r(u)}):u[n](function(){var n;return n=1<=arguments.length?h.call(arguments,0):[],r.apply(null,n)})},a("done",t.resolve,r),a("fail",t.reject,e),t},u.pipe=p,u.then=p,null==u.promise&&(u.promise=function(){return u}),u},this.promise(this),u=function(n,e,t){return function(){return c===r&&(c=n,a=arguments,l(e,a,t)),this}},this.resolve=u(t,i),this.reject=u(e,s),this.resolveWith=function(){var n,r;return r=arguments[0],n=2<=arguments.length?h.call(arguments,1):[],u(t,i,r).apply(null,n)},this.rejectWith=function(){var n,r;return r=arguments[0],n=2<=arguments.length?h.call(arguments,1):[],u(e,s,r).apply(null,n)},this},g=function(){var r,e,t,u,l,i,s;if(e=o(arguments),l=new n,!e.length)return l.resolve().promise();for(u=[],t=a(e.length,function(){return l.resolve.apply(l,u)}),e.forEach(function(n,r){return f(n)?n.done(function(){var n;return n=1<=arguments.length?h.call(arguments,0):[],u[r]=n.length>1?n:n[0],t()}):(u[r]=n,t())}),i=0,s=e.length;s>i;i++)r=e[i],f(r)&&r.fail(l.reject);return l.promise()},s=function(r){return r.Deferred=function(){return new n},r.ajax=p(r.ajax,function(r,e){var t,u,a,l;return null==e&&(e={}),u=new n,t=function(n,r){return p(n,function(){var n,e;return e=arguments[0],n=2<=arguments.length?h.call(arguments,1):[],e&&e.apply(null,n),r.apply(null,n)})},e.success=t(e.success,u.resolve),e.error=t(e.error,u.reject),l=r(e),a=u.promise(),a.abort=function(){return l.abort()},a}),r.when=g},"undefined"!=typeof exports?(exports.Deferred=function(){return new n},exports.when=g,exports.installInto=s):(this.Deferred=function(){return new n},this.Deferred.when=g,this.Deferred.installInto=s)}.call(this); |
@@ -5,3 +5,3 @@ { | ||
"description": "A deferred library for Node.js and the browser with a simplified jQuery compatible API", | ||
"version": "2.1.0", | ||
"version": "2.2.0", | ||
"homepage": "http://sudhirj.github.com/simply-deferred/", | ||
@@ -8,0 +8,0 @@ "repository": { |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
49523
688