backbone-promises
Advanced tools
Comparing version 0.2.0 to 0.2.2
32
index.js
@@ -12,2 +12,3 @@ var _ = require('underscore'); | ||
save: function(key, val, options) { | ||
debug('Model.Save'); | ||
var opt; | ||
@@ -20,6 +21,7 @@ if(!options && (typeof val === "object" || typeof val === "undefined")) { | ||
} | ||
var validated = Backbone.Model.prototype.save.call(this, key, val, options); | ||
var validated = Backbone.Model.prototype.save.call(this, key, val, opt); | ||
if(validated === false) { | ||
var err = this.validationError || new Error('Validation failed'); | ||
opt.error.call(this, this, err); | ||
var err = this.validationError || new Error('Validation failed'); | ||
debug('validation failed with error %s',err); | ||
return opt.deferred.reject(err); | ||
} | ||
@@ -39,2 +41,3 @@ debug('saved'); | ||
Backbone.Model.prototype.destroy.call(this, options); | ||
return options.promise; | ||
@@ -49,3 +52,3 @@ } | ||
create :function (model, options) { | ||
debug('Collection.create'); | ||
debug('Collection.create model'); | ||
options = Promises.wrap(options); | ||
@@ -67,22 +70,29 @@ Backbone.Collection.prototype.create.call(this, model, options); | ||
wrap: function(opt) { | ||
opt = opt || {}; | ||
opt = opt || {}; | ||
debug('Wrapping %s',JSON.stringify(opt)); | ||
var deferred = whenLib.defer(); | ||
var success = opt.success; | ||
var error = opt.error; | ||
opt.success = function() { | ||
if(success) success.apply(null, arguments); | ||
debug("resolving"); | ||
deferred.resolve.apply(null, arguments); | ||
if(success) success.apply(this, arguments); | ||
}; | ||
opt.error = function(model, err, resp) { | ||
debug("rejecting"); | ||
deferred.reject(err); | ||
if(error) { | ||
error.call(this, model, err, resp); | ||
} | ||
deferred.reject(err); | ||
debug("rejecting"); | ||
}; | ||
opt.promise = deferred.promise; | ||
opt.deferred = deferred; | ||
if(opt.promise) { | ||
debug('yielding promise'); | ||
deferred.promise.yield(opt.promise); | ||
} else { | ||
opt.promise = deferred.promise; | ||
opt.deferred = deferred; | ||
} | ||
return opt; | ||
@@ -89,0 +99,0 @@ }, |
{ | ||
"name": "backbone-promises", | ||
"version": "0.2.0", | ||
"version": "0.2.2", | ||
"description": "Adds Promises/A+ support to backbone model and collection", | ||
@@ -20,3 +20,3 @@ "main": "index.js", | ||
"mocha": "~1.13.0", | ||
"backbone-db": "~0.1.1", | ||
"backbone-db": "~0.4.0", | ||
"chai": "~1.8.0" | ||
@@ -23,0 +23,0 @@ }, |
@@ -11,2 +11,3 @@ | ||
var expect = require('chai').expect | ||
var monitor = require('when/monitor/console'); | ||
@@ -59,15 +60,18 @@ var MyModel = Model.extend({ | ||
validate: function() { | ||
return "Foo error"; | ||
return new Error("Foo error"); | ||
} | ||
}); | ||
var ErrorCollection = MyCollection.extend({ | ||
model: ErrorModel | ||
}); | ||
var collection = new ErrorCollection(); | ||
collection | ||
.create({foo: 1}) | ||
.done(function() { | ||
assert(false, 'should not allow creating model when validation fails'); | ||
assert.ok(false, 'should not allow creating model when validation fails'); | ||
}, function(err) { | ||
assert(err); | ||
assert.ok(err != null); | ||
t(); | ||
@@ -74,0 +78,0 @@ }); |
@@ -105,3 +105,3 @@ var assert = require('assert'); | ||
done(); | ||
})); | ||
}); | ||
}); | ||
@@ -108,0 +108,0 @@ |
12569
370