backbone-promises
Advanced tools
Comparing version 0.0.1 to 0.1.0
@@ -1,5 +0,6 @@ | ||
var Model = require('../').Model; | ||
var Collection = require('../').Model; | ||
var Db = require('backbone-db'); | ||
var Promises = require('../'); | ||
var MyModel = Model.extend({ | ||
var MyModel = Promises.Model.extend({ | ||
db:Db("mymodel"), | ||
@@ -15,13 +16,17 @@ sync:Db.sync, | ||
}); | ||
module.exports = MyModel; | ||
var a = new MyModel({id:1,abc:1}); | ||
a.save().then(function() { | ||
var b = new MyModel({id:1}); | ||
b.fetch().then(function() { | ||
console.log (a.get('abc') == b.get('abc')) | ||
if(!module.parent) { | ||
var a = new MyModel({id:1,abc:1}); | ||
a.save().then(function() { | ||
var b = new MyModel({id:1}); | ||
b.fetch().then(function() { | ||
console.log (a.get('abc') == b.get('abc')) | ||
}, function(err) { | ||
console.error(err); | ||
}); | ||
}, function(err) { | ||
console.error(err); | ||
}); | ||
}, function(err) { | ||
console.error(err); | ||
}); | ||
} |
86
index.js
var _ = require('underscore'); | ||
var Backbone = require('backbone'); | ||
var debug = require('debug')('backbone-promises'); | ||
var when = require('when'); | ||
var whenLib = require('when'); | ||
function bbPromise(opt, deferred) { | ||
opt = opt || {}; | ||
var success = opt.success; | ||
var error = opt.error; | ||
opt.success = function() { | ||
if(success) success.apply(this, arguments); | ||
if(typeof opt === "function") { | ||
var args = [].slice.call(arguments); | ||
args.unshift(null); | ||
opt.apply(this, args); | ||
} | ||
deferred.resolve.apply(this, arguments); | ||
}; | ||
opt.error = function() { | ||
if(success) error.apply(this, arguments); | ||
if(typeof opt === "function") opt.apply(this, arguments); | ||
deferred.reject.apply(this, arguments); | ||
}; | ||
return opt; | ||
} | ||
@@ -32,16 +12,17 @@ var Model = exports.Model = Backbone.Model.extend({ | ||
save: function(key, val, options) { | ||
var deferred = when.defer(); | ||
if(!options && (typeof val === "object" || typeof val === "undefined" || typeof val === "function")) { | ||
val = bbPromise(val, deferred); | ||
var opt; | ||
if(!options && (typeof val === "object" || typeof val === "undefined")) { | ||
debug('wrapping val'); | ||
opt = val = Promises.wrap(val); | ||
} else { | ||
options = bbPromise(options, deferred); | ||
opt = options = Promises.wrap(options); | ||
} | ||
Backbone.Model.prototype.save.call(this, key, val, options); | ||
return deferred.promise; | ||
debug('saved'); | ||
return opt.promise; | ||
}, | ||
fetch: function(options) { | ||
var deferred = when.defer(); | ||
options = bbPromise(options, deferred); | ||
options = Promises.wrap(options); | ||
Backbone.Model.prototype.fetch.call(this, options); | ||
return deferred.promise; | ||
return options.promise; | ||
} | ||
@@ -51,17 +32,44 @@ }); | ||
var Collection = exports.Collection = Backbone.Collection.extend({ | ||
constructor: function() { | ||
constructor:function () { | ||
Backbone.Collection.apply(this, arguments); | ||
}, | ||
create: function(model, options) { | ||
var deferred = when.defer(); | ||
options = bbPromise(options, deferred); | ||
create :function (model, options) { | ||
debug('Collection.create'); | ||
options = Promises.wrap(options); | ||
Backbone.Collection.prototype.create.call(this, model, options); | ||
return deferred.promise; | ||
return options.promise; | ||
}, | ||
fetch: function(options) { | ||
var deferred = when.defer(); | ||
options = bbPromise(options, deferred); | ||
fetch:function (options) { | ||
debug('Collection.fetch'); | ||
options = Promises.wrap(options); | ||
Backbone.Collection.prototype.fetch.call(this, options); | ||
return deferred.promise; | ||
return options.promise; | ||
} | ||
}); | ||
}); | ||
var Promises = _.extend(Backbone.Events, { | ||
when: whenLib, | ||
defer: whenLib.defer, | ||
wrap: function(opt) { | ||
opt = opt || {}; | ||
var deferred = whenLib.defer(); | ||
var success = opt.success; | ||
var error = opt.error; | ||
opt.success = function() { | ||
if(success) success.apply(success, arguments); | ||
debug("resolving"); | ||
deferred.resolve.apply(deferred, arguments); | ||
}; | ||
opt.error = function() { | ||
if(error) error.apply(error, arguments); | ||
debug("rejecting"); | ||
deferred.reject.apply(deferred, arguments); | ||
}; | ||
opt.promise = deferred.promise; | ||
return opt; | ||
}, | ||
Model: Model, | ||
Collection: Collection | ||
}); | ||
Backbone.Promises = module.exports = Promises; |
{ | ||
"name": "backbone-promises", | ||
"version": "0.0.1", | ||
"version": "0.1.0", | ||
"description": "Adds Promises/A+ support to backbone model and collection", | ||
@@ -20,3 +20,4 @@ "main": "index.js", | ||
"mocha": "~1.13.0", | ||
"backbone-db": "~0.0.1" | ||
"backbone-db": "~0.0.1", | ||
"chai": "~1.8.0" | ||
}, | ||
@@ -23,0 +24,0 @@ "dependencies": { |
@@ -32,3 +32,5 @@ var assert = require('assert'); | ||
var m = new MyModel({id:1}); | ||
debug('saving null options'); | ||
m.save(null, {success: function() { | ||
debug('done'); | ||
var ma = new MyModel({id:1}); | ||
@@ -49,5 +51,4 @@ ma.fetch({ | ||
},error: assert}); | ||
}); | ||
it('Should allow classic style with deferred', function(t) { | ||
it('Should allow classic style with Promises/A+', function(t) { | ||
var m = new MyModel({id:1}); | ||
@@ -65,16 +66,2 @@ m.save().then(function() { | ||
}); | ||
it('Should allow node.js style callbacks', function(t) { | ||
var m = new MyModel({id:1}); | ||
m.save({kissa:"koira"}, function(err, res) { | ||
assert(err == null); | ||
assert(res != null); | ||
var m2 = new MyModel(m.toJSON()); | ||
m2.fetch(function(err, res) { | ||
assert(err == null); | ||
assert(res != null); | ||
assert(m2.get("kissa") == "koira") | ||
t(); | ||
}); | ||
}); | ||
}); | ||
}); |
var assert = require('assert'); | ||
var Backbone = require('backbone'); | ||
var Model = require('../').Model; | ||
var Collection = require('../').Collection; | ||
var Backbone = require('backbone'); | ||
var Db = require('backbone-db'); | ||
var debug = require('debug')('deferred'); | ||
var debug = require('debug')('promises'); | ||
var when = require('../').when; | ||
var db = Db("mycol"); | ||
var expect = require('chai').expect | ||
@@ -36,8 +37,11 @@ var MyModel = Model.extend({ | ||
var a = new MyCollection(); | ||
a.create({id:1,data:"xyz"}).then(function(m) { | ||
assert(m.get("data") == "xyz"); | ||
var m1 = a.create({id:1,data:"xyz"}); | ||
var m2 = a.create({id:2,data:"zyx"}); | ||
var m3 = a.create({id:3,data:""}); | ||
Backbone.Promises.when.join(m1,m2,m3).then(function(values) { | ||
assert(values[0].get('data') == "xyz"); | ||
assert(values[1].get('data') == "zyx"); | ||
assert(values[2].get('data') == ""); | ||
t(); | ||
}, function() { | ||
assert(false); | ||
}); | ||
},assert).otherwise(assert); | ||
}); | ||
@@ -51,3 +55,2 @@ | ||
}); | ||
}); |
31186
15
279
3