不要怂,就是干,撸起袖子干!

Commit ccda887b by overlookmotel

Options passed to hooks

1 parent f7c25fca
Showing with 51 additions and 33 deletions
......@@ -584,7 +584,7 @@ module.exports = (function() {
return Promise.try(function() {
// Run before hook
if (options.hooks) {
return self.Model.runHooks('before' + hook, self).then(function() {
return self.Model.runHooks('before' + hook, self, options).then(function() {
// dataValues might have changed inside the hook, rebuild the values hash
values = {};
......@@ -634,7 +634,7 @@ module.exports = (function() {
}).tap(function(result) {
// Run after hook
if (options.hooks) {
return self.Model.runHooks('after' + hook, result);
return self.Model.runHooks('after' + hook, result, options);
}
}).then(function(result) {
return result;
......@@ -732,7 +732,7 @@ module.exports = (function() {
return Promise.try(function() {
// Run before hook
if (options.hooks) {
return self.Model.runHooks('beforeDestroy', self);
return self.Model.runHooks('beforeDestroy', self, options);
}
}).then(function() {
var identifier;
......@@ -747,7 +747,7 @@ module.exports = (function() {
}).tap(function(result) {
// Run after hook
if (options.hooks) {
return self.Model.runHooks('afterDestroy', self);
return self.Model.runHooks('afterDestroy', self, options);
}
}).then(function(result) {
return result;
......
......@@ -1170,10 +1170,7 @@ module.exports = (function() {
return Promise.try(function() {
// Run before hook
if (options.hooks) {
return self.runHooks('beforeBulkCreate', daos, options.fields).spread(function(_daos, _fields) {
daos = _daos || daos;
options.fields = _fields || options.fields;
});
return self.runHooks('beforeBulkCreate', daos, options);
}
}).then(function() {
daos.forEach(function(dao) {
......@@ -1216,7 +1213,14 @@ module.exports = (function() {
if (options.individualHooks) {
// Create each dao individually
return Promise.map(daos, function(dao) {
return dao.save({transaction: options.transaction});
var individualOptions = Utils._.clone(options);
delete individualOptions.fields;
delete individualOptions.individualHooks;
delete individualOptions.ignoreDuplicates;
individualOptions.validate = false;
individualOptions.hooks = true;
return dao.save(individualOptions);
}).then(function(_daos) {
daos = _daos;
});
......@@ -1254,9 +1258,7 @@ module.exports = (function() {
}).then(function() {
// Run after hook
if (options.hooks) {
return self.runHooks('afterBulkCreate', daos, options.fields).spread(function(_daos) {
if (_daos) daos = _daos;
});
return self.runHooks('afterBulkCreate', daos, options);
}
}).then(function() {
return daos;
......@@ -1293,16 +1295,18 @@ module.exports = (function() {
return Promise.try(function() {
// Run before hook
if (options.hooks) {
return self.runHooks('beforeBulkDestroy', where).spread(function(_where) {
where = _where || where;
options.where = where;
return self.runHooks('beforeBulkDestroy', options).then(function() {
where = options.where;
delete options.where;
});
}
}).then(function() {
// Get daos and run beforeDestroy hook on each record individually
if (options.individualHooks) {
return self.all({where: where}, {transaction: options.transaction}).map(function(dao) {
return self.runHooks('beforeDestroy', dao).spread(function(_dao) {
return _dao || dao;
return self.findAll({where: where}, {transaction: options.transaction}).map(function(dao) {
return self.runHooks('beforeDestroy', dao, options).then(function() {
return dao;
});
}).then(function(_daos) {
daos = _daos;
......@@ -1321,13 +1325,16 @@ module.exports = (function() {
// Run afterDestroy hook on each record individually
if (options.individualHooks) {
return Promise.map(daos, function(dao) {
return self.runHooks('afterDestroy', dao);
return self.runHooks('afterDestroy', dao, options);
});
}
}).tap(function() {
// Run after hook
if (options.hooks) {
return self.runHooks('afterBulkDestroy', where);
options.where = where;
return self.runHooks('afterBulkDestroy', options).then(function() {
delete options.where;
});
}
}).then(function(affectedRows) {
return affectedRows;
......@@ -1387,9 +1394,13 @@ module.exports = (function() {
}).then(function() {
// Run before hook
if (options.hooks) {
return self.runHooks('beforeBulkUpdate', attrValueHash, where).spread(function(_attrValueHash, _where) {
where = _where || where;
attrValueHash = _attrValueHash || attrValueHash;
options.where = where;
options.attributes = attrValueHash;
return self.runHooks('beforeBulkUpdate', options).then(function() {
where = options.where;
attrValueHash = options.attributes;
delete options.where;
delete options.attributes;
});
}
}).then(function() {
......@@ -1397,7 +1408,7 @@ module.exports = (function() {
// Get daos and run beforeUpdate hook on each record individually
if (options.individualHooks) {
return self.all({where: where}, {transaction: options.transaction}).then(function(_daos) {
return self.findAll({where: where}, {transaction: options.transaction}).then(function(_daos) {
daos = _daos;
if (!daos.length) {
return [];
......@@ -1413,9 +1424,7 @@ module.exports = (function() {
Utils._.extend(dao.dataValues, attrValueHash);
// Run beforeUpdate hook
return self.runHooks('beforeUpdate', dao).spread(function(_dao) {
dao = _dao || dao;
return self.runHooks('beforeUpdate', dao, options).then(function() {
if (!different) {
var thisChangedValues = {};
Utils._.forIn(dao.dataValues, function(newValue, attr) {
......@@ -1447,7 +1456,12 @@ module.exports = (function() {
// Hooks change values in a different way for each record
// Do not run original query but save each record individually
return Promise.map(daos, function(dao) {
return dao.save({transaction: options.transaction, hooks: false});
var individualOptions = Utils._.clone(options);
delete individualOptions.individualHooks;
individualOptions.hooks = false;
individualOptions.validate = false;
return dao.save(individualOptions);
}).tap(function(_daos) {
daos = _daos;
});
......@@ -1464,6 +1478,7 @@ module.exports = (function() {
// Run query to update all rows
return self.QueryInterface.bulkUpdate(self.getTableName(), attrValueHashUse, where, options, self.tableAttributes).then(function(affectedRows) {
if (options.returning) {
daos = affectedRows;
return [affectedRows.length, affectedRows];
}
......@@ -1472,17 +1487,20 @@ module.exports = (function() {
}).tap(function(result) {
if (options.individualHooks) {
return Promise.map(daos, function(dao) {
return self.runHooks('afterUpdate', dao).spread(function(_dao) {
return _dao || dao;
});
}).then(function(_daos) {
result[1] = daos = _daos;
return self.runHooks('afterUpdate', dao, options);
}).then(function() {
result[1] = daos;
});
}
}).tap(function() {
// Run after hook
if (options.hooks) {
return self.runHooks('afterBulkUpdate', attrValueHash, where);
options.where = where;
options.attributes = attrValueHash;
return self.runHooks('afterBulkUpdate', options).then(function() {
delete options.where;
delete options.attributes;
});
}
}).then(function(result) {
// Return result in form [affectedRows, daos] (daos missed off if options.individualHooks != true)
......
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!