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 }