js-mockdata-registry
Version:
JavaScript registry for mockdata
81 lines (72 loc) • 2.69 kB
JavaScript
;
var util = require('util');
module.exports = (function () {
var self = {};
var registry = {};
// store all marked objects in this array object
self.objRegistry = {};
self.hasObject = function (mark) {
if (mark) {
return self.objRegistry[mark] !== undefined;
} else {
return false;
}
};
registry.addObject = function (obj) {
if (obj && obj.mark) {
if (!self.hasObject(obj.mark)) {
self.objRegistry[obj.mark] = obj;
delete obj.mark;
return obj;
} else {
throw new Error("Object mark '" + obj.mark + "' is already registered");
}
} else {
throw new Error('Given object has not attribute \'mark\'', obj);
}
};
registry.removeObject = function (mark) {
if (mark) {
if (self.hasObject(mark)) {
delete self.objRegistry[mark];
} else {
throw new Error("Object mark '" + mark + "' is not registered");
}
} else {
throw new Error('No valid \'mark\' given', mark);
}
};
registry.log = function (depth) {
console.log(util.inspect(self.objRegistry, {depth: depth}));
};
registry.getObject = function (mark) {
if (mark) {
if (self.hasObject(mark)) {
return self.objRegistry[mark];
} else {
throw new Error("Link to Object with mark '" + mark + "' not possible");
}
} else {
throw new Error('No valid \'mark\' given', mark);
}
};
registry.resolve = function (resultObj, obj, attrib) {
if (obj && obj[attrib]) {
if (Object.prototype.toString.call(obj[attrib]) === '[object Object]' && obj[attrib].objectRef) {
resultObj[attrib] = registry.getObject(obj[attrib].objectRef);
} else if (Object.prototype.toString.call(obj[attrib]) === '[object Array]') {
resultObj[attrib] = [];
obj[attrib].forEach(function (each) {
if (Object.prototype.toString.call(each) === '[object Object]' && each.objectRef) {
resultObj[attrib].push(registry.getObject(each.objectRef));
} else {
resultObj[attrib].push(each);
}
});
} else {
resultObj[attrib] = obj[attrib];
}
}
};
return {registry: registry};
})();