1  
     2  
     9  
    10  
    19  class com.sekati.log.Inspector {
    20  
    21  	private var _result:String;
    22  
    23  	
    26  	public function Inspector() {
    27  		_result = "";
    28  		recurse.apply( this, arguments );
    29  	}
    30  
    31  		
    39  	private function recurse(obj:Object, path:String, level:Number, maxPathLength:Number):Void {
    40  		var padding:String;
    41  		var paddingChar:String = " ";
    42  		var parentType:String;
    43  		var currentType:String;
    44  		var newPath:String;
    45  		
    46  		if (level == null) {
    47  			level = 0;
    48  		}
    49  		if (path == null) {
    50  			path = "";
    51  		}
    52  		
    53  		if (maxPathLength == null) {
    54  			maxPathLength = paddingRecursion( obj, path ) + 3;
    55  		}
    56  		
    57  		parentType = (obj instanceof Array) ? "array" : typeof (obj);
    58  		for (var i in obj) {
    59  			
    60  			newPath = (parentType == "array") ? path + "[" + i + "]" : path + "." + i;
    61  			
    62  			currentType = (obj[i] instanceof Array) ? "array" : typeof (obj[i]);
    63  			
    64  			padding = "";
    65  			for (var j:Number = 0; j < maxPathLength - newPath.length ; j++) {
    66  				padding += paddingChar;
    67  			}
    68  			_result += (newPath + padding + obj[i] + "  (" + currentType + ")\n");
    69  			
    70  			recurse( obj[i], newPath, level + 1, maxPathLength );
    71  		}
    72  	}
    73  
    74  	
    78  	private function paddingRecursion(obj:Object, path:String, longestPath:Number):Number {
    79  		var parentType:String;
    80  		if (longestPath == null) {
    81  			longestPath = 0;
    82  		}
    83  		
    84  		parentType = (obj instanceof Array) ? "array" : typeof (obj);
    85  		for (var i in obj) {
    86  			
    87  			var newPath:String = (parentType == "array") ? path + "[" + i + "]" : path + "." + i;
    88  			if (newPath.length > longestPath) {
    89  				longestPath = newPath.length;
    90  			}
    91  			
    92  			var outsideRecursion:Number = paddingRecursion( obj[i], newPath, longestPath );
    93  			if (outsideRecursion > longestPath) {
    94  				longestPath = outsideRecursion;
    95  			}
    96  		}
    97  		return longestPath;
    98  	}
    99  
   100  	public function toString():String {
   101  		return _result;	
   102  	}
   103  }