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

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