backbone-promises
Advanced tools
Comparing version 0.2.2 to 0.2.3
35
index.js
@@ -1,5 +0,5 @@ | ||
var _ = require('underscore'); | ||
var Backbone = require('backbone'); | ||
var debug = require('debug')('backbone-promises'); | ||
var whenLib = require('when'); | ||
var when = whenLib = require('when'); | ||
var _ = require('lodash'); | ||
@@ -13,3 +13,3 @@ | ||
debug('Model.Save'); | ||
var opt; | ||
var opt, self = this; | ||
if(!options && (typeof val === "object" || typeof val === "undefined")) { | ||
@@ -21,9 +21,7 @@ debug('wrapping val'); | ||
} | ||
var validated = Backbone.Model.prototype.save.call(this, key, val, opt); | ||
var validated = Backbone.Model.prototype.save.call(this, key, val, options); | ||
if(validated === false) { | ||
var err = this.validationError || new Error('Validation failed'); | ||
debug('validation failed with error %s',err); | ||
return opt.deferred.reject(err); | ||
debug('Model validation failed'); | ||
opt.deferred.reject(this.validationError||new Error('validation failed')); | ||
} | ||
debug('saved'); | ||
return opt.promise; | ||
@@ -41,3 +39,2 @@ }, | ||
Backbone.Model.prototype.destroy.call(this, options); | ||
return options.promise; | ||
@@ -70,13 +67,11 @@ } | ||
opt = opt || {}; | ||
debug('Wrapping %s',JSON.stringify(opt)); | ||
var deferred = whenLib.defer(); | ||
var deferred = opt.deferred || when.defer(); | ||
var success = opt.success; | ||
var error = opt.error; | ||
opt.success = function() { | ||
debug("resolving"); | ||
deferred.resolve.apply(null, arguments); | ||
deferred.resolve.apply(deferred, arguments); | ||
if(success) success.apply(this, arguments); | ||
}; | ||
} | ||
opt.error = function(model, err, resp) { | ||
@@ -88,10 +83,6 @@ debug("rejecting"); | ||
} | ||
}; | ||
if(opt.promise) { | ||
debug('yielding promise'); | ||
deferred.promise.yield(opt.promise); | ||
} else { | ||
} | ||
if(!opt.deferred) { | ||
opt.deferred = deferred; | ||
opt.promise = deferred.promise; | ||
opt.deferred = deferred; | ||
} | ||
@@ -98,0 +89,0 @@ return opt; |
{ | ||
"name": "backbone-promises", | ||
"version": "0.2.2", | ||
"version": "0.2.3", | ||
"description": "Adds Promises/A+ support to backbone model and collection", | ||
@@ -25,6 +25,6 @@ "main": "index.js", | ||
"backbone": "~1.1.0", | ||
"underscore": "~1.4.4", | ||
"debug": "~0.7.2", | ||
"when": "~2.8.0" | ||
"when": "~2.8.0", | ||
"lodash": "~2.4.1" | ||
} | ||
} |
@@ -24,2 +24,15 @@ var assert = require('assert'); | ||
describe('#Model', function() { | ||
it('should have chainable methods as promises', function(next) { | ||
var m = new MyModel(); | ||
m.save({"test":123}).then(function() { | ||
return m.save({"test_b":"a"}).then(function(mo) { | ||
var model = new MyModel({id:mo.get(mo.idAttribute)}); | ||
return model.fetch(); | ||
}) | ||
}).done(function(m) { | ||
assert.equal(m.get("test_b"), "a"); | ||
next(); | ||
}, next) | ||
}); | ||
it('should have deferred .save', function(t) { | ||
@@ -29,5 +42,3 @@ var m = new MyModel({id:1}); | ||
t(); | ||
}, function() { | ||
assert(false); | ||
}); | ||
}, t); | ||
}); | ||
@@ -39,11 +50,8 @@ | ||
var m2 = new MyModel({id:2}); | ||
m2.fetch().then(function(model) { | ||
return m2.fetch().then(function(model) { | ||
assert(model.get("test") == "a"); | ||
t(); | ||
}, function() { | ||
assert(false); | ||
}); | ||
}, function() { | ||
assert(false); | ||
}); | ||
}).done(function() { | ||
t(); | ||
}, t); | ||
}); | ||
@@ -85,5 +93,3 @@ | ||
return m.destroy().then(function() { | ||
return m.fetch().then(function() { | ||
assert.ok(false); | ||
}, | ||
return m.fetch().then(t, | ||
function(err) { | ||
@@ -104,6 +110,6 @@ assert(err instanceof(Error), 'It should return an error when not found'); | ||
}; | ||
m.save({id:123, variable:"test"}).done(function() { | ||
assert.fail(); | ||
}, function(err) { | ||
m.save({id:123, variable:"test"}).then(done, function(err) { | ||
assert.equal(err.message, 'failed validating'); | ||
return when.resolve(); | ||
}).done(done, function() { | ||
done(); | ||
@@ -120,3 +126,9 @@ }); | ||
return m2.fetch().then(function() { | ||
return m3.fetch(); | ||
return when.promise(function(resolve, reject) { | ||
m3.fetch().done(function() { | ||
setTimeout(function() { | ||
resolve(); | ||
}, 1) | ||
}, reject); | ||
}) | ||
}); | ||
@@ -123,0 +135,0 @@ }) |
12877
375
+ Addedlodash@~2.4.1
+ Addedlodash@2.4.2(transitive)
- Removedunderscore@~1.4.4
- Removedunderscore@1.4.4(transitive)