-
Notifications
You must be signed in to change notification settings - Fork 1
/
baseadapter.js
92 lines (74 loc) · 1.81 KB
/
baseadapter.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
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
92
var ObjectID = require('./lib/node-mongodb-native/lib/mongodb/bson/bson').ObjectID; //should this be in the data provider?
/**
* Adapts between schema and mongo objs
*/
var BaseAdapter = function() {
};
BaseAdapter.prototype = {
/**
* If an array is passed in, you get back an array
* If an object is passed in you get back an object
*/
templatableAdapter: function(obj, adapters) {
var returnArray = true;
if(!adapters.length) {
adapters = [adapters];
}
var numAdapters = adapters.length;
if(!Array.isArray(obj)) { //ecma 5
returnArray = false;
obj = [obj];
}
var numObjs = obj.length;
var results = [];
var result;
var newObj;
var adapter;
for(var i=0;i<numObjs;i++){
newObj = {};
for(var j=0;j<numAdapters;j++) {
adapter = adapters[j];
newObj = adapter(newObj, obj[i]);
}
results.push(newObj);
}
//require('sys').debug(JSON.stringify(results));
return returnArray ? results : results[0]
},
adaptFromSchemaId: function(mongo, schema) {
if(schema.id) {
mongo._id = ObjectID.createFromHexString(schema.id);
}
return mongo;
},
adaptToSchemaId: function(schema, mongo) {
if(mongo._id && mongo._id.toHexString) {
schema.id = mongo._id.toHexString();
}
return schema;
},
adaptFromSchemaState: function(mongo, schema) {
if(schema.state) {
mongo.s = schema.state;
mongo.sl = schema.state.length;
} else {
mongo.s = [];
}
return mongo;
},
adaptToSchemaState: function(schema, mongo) {
if(mongo.s) {
schema.state = mongo.s;
} else {
schema.state = [];
}
return schema;
},
adaptObjectIdToHexString: function(objectId) {
return objectId.toHexString();
},
adaptHexStringToObjectId: function(hexString) {
return ObjectID.createFromHexString(hexString);
}
};
exports.BaseAdapter = BaseAdapter;