diff --git a/lib/abstract-class.js b/lib/abstract-class.js index d27ad3c0..d6fc8e0e 100644 --- a/lib/abstract-class.js +++ b/lib/abstract-class.js @@ -103,7 +103,7 @@ AbstractClass.prototype._initProperties = function (data, applySetters) { }.bind(this)); function getDefault(attr) { - var def = properties[attr]['default'] + var def = properties[attr]['default']; if (isdef(def)) { if (typeof def === 'function') { return def(); @@ -116,7 +116,7 @@ AbstractClass.prototype._initProperties = function (data, applySetters) { } this.trigger("initialize"); -}; +} AbstractClass.setter = {}; AbstractClass.getter = {}; @@ -419,7 +419,7 @@ AbstractClass.count = function (where, cb) { */ AbstractClass.toString = function () { return '[Model ' + this.modelName + ']'; -} +}; /** * Save instance. When instance haven't id, create method called instead. @@ -537,7 +537,7 @@ AbstractClass.prototype.destroy = function (cb) { this._adapter().destroy(this.constructor.modelName, this.id, function (err) { removeFromCache(this.constructor, this.id); destroyed(function () { - cb && cb(err); + if(cb) cb(err); }); }.bind(this)); }); @@ -731,7 +731,7 @@ AbstractClass.belongsTo = function (anotherClass, params) { var fk = params.foreignKey; this.schema.defineForeignKey(this.modelName, fk); - this.prototype['__finders__'] = this.prototype['__finders__'] || {} + this.prototype['__finders__'] = this.prototype['__finders__'] || {}; this.prototype['__finders__'][methodName] = function (id, cb) { anotherClass.find(id, function (err,inst) { @@ -742,7 +742,7 @@ AbstractClass.belongsTo = function (anotherClass, params) { cb(new Error('Permission denied')); } }.bind(this)); - } + }; this.prototype[methodName] = function (p) { if (p instanceof AbstractClass) { // acts as setter @@ -838,8 +838,29 @@ function defineScope(cls, targetClass, name, params, methods) { this.build(data).save(cb); } - function destroyAll(id, cb) { - // implement me + /* + Callback + - The callback will be called after all elements are destroyed + - For every destroy call which results in an error + - If fetching the Elements on which destroyAll is called results in an error + */ + function destroyAll(cb) { + targetClass.all(this._scope, function (err, data) { + if (err) { + cb(err); + } else { + (function loopOfDestruction (data) { + if(data.length > 0) { + data.shift().destroy(function(err) { + if(err && cb) cb(err); + loopOfDestruction(data); + }); + } else { + if(cb) cb(); + } + }(data)); + } + }); } function mergeParams(base, update) {