Skip to content

Instantly share code, notes, and snippets.

@atuttle
Created April 29, 2016 15:57
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save atuttle/462dc0b732373f4244eb4e46d2481750 to your computer and use it in GitHub Desktop.
Save atuttle/462dc0b732373f4244eb4e46d2481750 to your computer and use it in GitHub Desktop.
<cfscript>
function deORM( obj, depth = 1, depthLimit = 10 ){
var deWormed = {};
if (depth >= depthLimit){
return {};
}
if (isSimpleValue( obj )){
deWormed = obj;
}
else if (isObject( obj )){
var md = getMetadata( obj );
do {
if (md.keyExists('properties')){
for (var prop in md.properties){
if (structKeyExists(obj, 'get' & prop.name)){
if ( !prop.keyExists('fieldtype') || prop.fieldtype == "id" ){
deWormed[ prop.name ] = invoke(obj, "get#prop.name#");
}
}
}
}
if (md.keyExists('extends')){
md = md.extends;
}
} while(md.keyExists('extends'));
}
else if (isStruct( obj )){
for (var key in obj){
deWormed[ key ] = deORM( obj[key], depth+1, depthLimit );
}
}
else if (isArray( obj )){
var deWormed = [];
for (var el in obj){
deWormed.append( deORM( el, depth+1, depthLimit ) );
}
}
else{
deWormed = getMetadata( obj );
}
return deWormed;
}
</cfscript>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment