-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.js
More file actions
91 lines (69 loc) · 2.74 KB
/
index.js
File metadata and controls
91 lines (69 loc) · 2.74 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
var async = require('async')
;
function plugin(schema) {
/***************************************************************************
* PRE HOOKS
* These hooks run before an instance has been saved (updated)
* Puesto que el `iteratee` consiste meramente en la ejecucion del
* metodo pertinente en cada una de las iteraciones, los hooks
* agregados a la coleccion de `pre-create` deben adecuarse a la
* signatura `function(next)`
*/
schema.preCreateMethods = [];
schema.preCreate = function(fn){ schema.preCreateMethods.push(fn) };
schema.methods.runPreCreateMethods = runPreCreateMethods;
/***************************************************************************
* POST HOOKS
* These hooks run after an instance has been saved (created)
* Puesto que el `iteratee` consiste meramente en la ejecucion del
* metodo pertinente en cada una de las iteraciones, los hooks
* agregados a la coleccion de `post-create` deben adecuarse a la
* signatura `function(doc)`
*/
schema.postCreateMethods = [];
schema.postCreate = function(fn){ schema.postCreateMethods.push(fn) };
schema.methods.runPostCreateMethods = runPreCreateMethods;
/***************************************************************************
* HOOKS TRIGGERING SETUP
* Puesto que no existe ninguna funcion 'create' que pueda ser
* 'escuchada' al estilo de `init`, `save`... la forma de provocar
* el desencadenamiento de los hooks asociados al evento `create`
* es evaluar si se trata de un documento de nueva creacion, y si
* lo es, ejecutar los hooks `pre-` y los `post-` en el seno de sendos
* hooks `pre-save` y `post-save`
*
* En el seno de las funciones definidas, `DOC` se refiere al
* documento mismo sobre el cual operan las `hooks`.
*/
schema.pre('validate', function(next){
const DOC = this;
DOC._wasNew = DOC.isNew;
return next();
}
);
schema.pre('save', function(next){
const DOC = this;
if (DOC.isNew) runPreCreateMethods(schema.preCreateMethods, DOC, next);
else return next();
}
);
schema.post('save', function(doc){
if (doc._wasNew) runPostCreateMethods(schema.postCreateMethods, doc);
else return;
}
);
}
function runPreCreateMethods(methods, doc, callback){
async.eachSeries(
methods,
function(method, signal){ method.bind(doc)(signal) },
callback
);
}
function runPostCreateMethods(methods, doc){
methods.forEach(function(method){
method(doc, function(){return});
}
);
}
module.exports = plugin;