-
Notifications
You must be signed in to change notification settings - Fork 22
/
supergoose.js
40 lines (37 loc) · 1.3 KB
/
supergoose.js
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
var _ = require('underscore')
, addModelMethods = require('./model_methods.js')
, addSchemaMethods = require('./schema_methods.js')
module.exports = exports = function superGoosePlugin(schema, options) {
options = _.extend({messages: {}, instance: null}, options)
addModelMethods(schema, options.messages)
addSchemaMethods(schema, options.instance)
/**
* Transform methods for protected fields
*/
if(options.protect){
if (!schema.options.toObject) schema.options.toObject = {}
schema.options.toObject.transform = function(doc, ret, options) {
if(typeof doc.ownerDocument !== 'function') {
if (doc.schema !== schema)
return doc.toObject();
var fields = options.protectedFields
? options.protectedFields.split(' ') : []
fields.forEach(function(prop) {
delete ret[prop];
})
}
}
if (!schema.options.toJSON) schema.options.toJSON = {}
schema.options.toJSON.transform = function(doc, ret, options) {
if(typeof doc.ownerDocument !== 'function') {
if (doc.schema !== schema)
return doc.toJSON();
var fields = options.protectedFields
? options.protectedFields.split(' ') : []
fields.forEach(function(prop) {
delete ret[prop];
})
}
}
}
}