Today's ColdFusion Puzzler is based on a cool Groovy feature. I was surprised to discover that Groovy supports a Dump function. While I don't find it as pretty as ColdFusion's version, it's nice to have when debugging. But Groovy takes it a bit further and adds something similar called the inspect() function. The inspect function will take any arbitrary object and return a string that could be used to create it. Here is an example:

def s = [ name:"Raymond", age:35, rank:"Jedi" ]

def a = [0,2,3] def b = new Date()

s.a = a s.bornondate = b

println s.inspect()

This returns:

["name":"Raymond", "age":35, "rank":"Jedi", "a":[0, 2, 3], "bornondate":Fri Sep 12 08:48:16 CDT 2008]

As you can see, it isn't the code I used but code that would generate the same data.

Your challege, should you choose to accept it, is to write a similar function for ColdFusion. Your output need not look the exact same of course. I've provided a simple example that only works with arrays to get your started.

<cfscript> function inspect(arr) { var r = ""; var i = "";

r = "[";

for(i=1; i <= arrayLen(arr); i++) { r &= arr[i]; if(i < arrayLen(arr) ) r&=","; }

r &= "]"; return r; } </cfscript>

<cfset a = [1,2,9,20]> <cfoutput>#inspect(a)#</cfoutput>

Your code should handle arrays, structs, and simple values. For extra credit you can handle queries to by using a bunch of query set sells.

Also note that my test UDF returns a literal value like Groovy. You can also return a series of statements instead:

ob = arrayNew(1); ob[1] = 1; ob[2] = 2; etc

Note that I used "ob" to represent the top level data. Since I pass the variable, and not the variable name, I chose an arbitrary variable name to store the data.