node-deadline
Version:
Module to interface with Deadline Compute Management System by Thinkbox Software
73 lines (59 loc) • 1.55 kB
JavaScript
var PropertyMap = module.exports = function( map ) {
this.map = {};
this.revMap = {};
this.setMap( map );
};
PropertyMap.prototype.setMap = function( map ) {
var prop;
this.map = map;
this.revMap = {};
for ( prop in this.map ) {
this.revMap[ this.map[ prop ] ] = prop;
}
};
PropertyMap.prototype.mapObj = function( obj, dest ) {
var propStack = [],
prop;
if ( "undefined" == typeof dest ) {
dest = {};
}
for ( prop in this.map ) {
PropertyMap.writeProp( dest, prop, PropertyMap.readProp( obj, this.map[ prop ] ) );
}
return dest;
};
PropertyMap.prototype.unmapObj = function( obj, dest ) {
var propStack = [],
prop;
if ( "undefined" == typeof dest ) {
dest = {};
}
for ( prop in this.revMap ) {
PropertyMap.writeProp( dest, prop, PropertyMap.readProp( obj, this.revMap[ prop ] ) );
}
return dest;
};
//takes a list of period-seperated property names
//and drills into the given object, returning the value
PropertyMap.readProp = function( obj, prop ) {
var i;
prop = prop.split( "." );
for ( i in prop ) {
obj = obj[ prop[ i ] ];
}
return obj;
};
//takes a list of period-seperated property names
//and drills into the given object, returning the value
PropertyMap.writeProp = function( obj, prop, val ) {
var i;
prop = prop.split( "." );
for ( i = 0; i < prop.length - 1; i++ ) {
if ( "undefined" == typeof obj[ prop[ i ] ] ) {
obj[ prop[ i ] ] = {};
}
obj = obj[ prop[ i ] ];
}
obj[ prop.pop() ] = val;
return obj;
};