3 var f = require('util').format,
4 require_optional = require('require_optional');
6 // Set property function
7 var setProperty = function(obj, prop, flag, values) {
8 Object.defineProperty(obj, prop.name, {
10 set: function(value) {
11 if(typeof value != 'boolean') throw new Error(f("%s required a boolean", prop.name));
13 if(value == true) values.flags |= flag;
14 // Flip the bit to 0 if it's set, otherwise ignore
15 if(value == false && (values.flags & flag) == flag) values.flags ^= flag;
18 , get: function() { return prop.value; }
22 // Set property function
23 var getProperty = function(obj, propName, fieldName, values, func) {
24 Object.defineProperty(obj, propName, {
27 // Not parsed yet, parse it
28 if(values[fieldName] == null && obj.isParsed && !obj.isParsed()) {
32 // Do we have a post processing function
33 if(typeof func == 'function') return func(values[fieldName]);
35 return values[fieldName];
40 // Set simple property
41 var getSingleProperty = function(obj, name, value) {
42 Object.defineProperty(obj, name, {
51 var copy = function(fObj, tObj) {
53 for(var name in fObj) tObj[name] = fObj[name];
57 var debugOptions = function(debugFields, options) {
58 var finaloptions = {};
59 debugFields.forEach(function(n) {
60 finaloptions[n] = options[n];
66 var retrieveBSON = function() {
67 var BSON = require('bson');
72 BSON = require('bson-ext');
75 var optionalBSON = require_optional('bson-ext');
77 optionalBSON.native = true;
86 exports.setProperty = setProperty;
87 exports.getProperty = getProperty;
88 exports.getSingleProperty = getSingleProperty;
90 exports.debugOptions = debugOptions;
91 exports.retrieveBSON = retrieveBSON;