Comparing version 0.3.2 to 0.4.0
@@ -22,6 +22,9 @@ // Load modules | ||
String: 'yellow', | ||
Undefined: 'red.inverse' | ||
Undefined: 'red.inverse', | ||
path: 'blue' | ||
}, | ||
defaults: { | ||
plain: false | ||
plain: false, | ||
path: false, | ||
pathPrefix: '// ' | ||
} | ||
@@ -44,3 +47,3 @@ }; | ||
internals.settings = Hoek.applyToDefaults(internals.defaults, options || {}); | ||
return internals.travel(object); | ||
return internals.travel(object, ''); | ||
}; | ||
@@ -55,3 +58,3 @@ | ||
internals.travel = function (object, addIndentLevel) { | ||
internals.travel = function (object, path) { | ||
@@ -62,3 +65,3 @@ var type = global.toString.call(object).split(' ')[1].slice(0, -1); | ||
if (internals[type]) { | ||
format = internals[type](object); | ||
format = internals[type](object, path); | ||
} | ||
@@ -100,4 +103,9 @@ else { | ||
internals.Object = function (object) { | ||
internals.tidyPath = function (path) { | ||
return internals.colorize(path.slice(1, path.size), 'path'); | ||
}; | ||
internals.Object = function (object, path) { | ||
if (Object.keys(object).length === 0) { | ||
@@ -113,6 +121,8 @@ return '{}'; | ||
var keys = Object.keys(object); | ||
var keyLengths = Hoek.clone(keys); | ||
internals.indentLevel = internals.indentLevel + 1; | ||
var out = '{\n'; | ||
internals.indentLevel = internals.indentLevel + 1; | ||
var longest = Hoek.clone(keys).sort(internals.lengthCompare)[keys.length - 1]; | ||
keyLengths.push(internals.settings.pathPrefix); | ||
var longest = keyLengths.sort(internals.lengthCompare)[keyLengths.length - 1]; | ||
@@ -122,3 +132,8 @@ for (var i = 0, il = keys.length; i < il; ++i) { | ||
var item = object[key]; | ||
out = out + internals.indent() + '' + (internals.printMember(key, longest) + ':') + ' ' + internals.travel(item); | ||
if (internals.settings.path && path.length > 0) { | ||
out = out + internals.indent() + | ||
internals.colorize(internals.settings.pathPrefix, 'path') + | ||
internals.tidyPath(path + '.' + key) + '\n'; | ||
} | ||
out = out + internals.indent() + '' + (internals.printMember(key, longest) + ':') + ' ' + internals.travel(item, path + '.' + key); | ||
if (i !== il - 1) { | ||
@@ -135,3 +150,3 @@ out = out + ','; | ||
internals.Array = function (array) { | ||
internals.Array = function (array, path) { | ||
@@ -152,3 +167,8 @@ if (array.length === 0) { | ||
var item = array[i]; | ||
out = out + internals.indent() + '' + ('[' + internals.printMember(i, il) + ']') + ' ' + internals.travel(item); | ||
if (internals.settings.path && path.length > 0) { | ||
out = out + internals.indent() + | ||
internals.colorize(internals.settings.pathPrefix, 'path') + | ||
internals.tidyPath(path + '.' + i) + '\n'; | ||
} | ||
out = out + internals.indent() + '' + ('[' + internals.printMember(i, il) + ']') + ' ' + internals.travel(item, path + '.' + i); | ||
if (i !== il - 1) { | ||
@@ -205,8 +225,9 @@ out = out + ','; | ||
internals.printMember = function (member, max) { | ||
internals.printMember = function (member, max, type) { | ||
var type = type || 'Key'; | ||
var memberLength = (member + '').length; | ||
var maxLength = (max + '').length; | ||
var toShift = maxLength - memberLength; | ||
return internals.colorize(internals.spaces(toShift) + member, 'Key'); | ||
return internals.colorize(internals.spaces(toShift) + member, type); | ||
}; |
{ | ||
"name": "purdy", | ||
"version": "0.3.2", | ||
"version": "0.4.0", | ||
"description": "print objects real purdy in color", | ||
@@ -26,2 +26,3 @@ "main": "index.js", | ||
"devDependencies": { | ||
"hoek": "2.x.x", | ||
"lab": "3.x.x" | ||
@@ -28,0 +29,0 @@ }, |
@@ -21,2 +21,4 @@ # Purdy | ||
* `plain` - when `true`, prints result without colors. Defaults to `false` with tty, `true` when not. | ||
* `path` - when `true`, prints result with a path (To be used with [Hoek.reach()](https://github.com/spumko/hoek#reachobj-chain-options)) | ||
* `pathPrefix` - prefix for path. default: `// ` | ||
@@ -100,3 +102,40 @@ | ||
``` javascript | ||
// var obj = { | ||
// travel: { | ||
// down: { | ||
// a: [{ | ||
// path: 'to get here' | ||
// }] | ||
// } | ||
// } | ||
// Purdy(obj, { path: true }); | ||
{ | ||
travel: { | ||
// travel.down | ||
down: { | ||
// travel.down.a | ||
a: [ | ||
// travel.down.a.0 | ||
[0] { | ||
// travel.down.a.0.path | ||
path: 'to get here' | ||
} | ||
] | ||
} | ||
} | ||
} | ||
// var Hoek = require('hoek'); | ||
// Purdy(Hoek.reach(obj, 'travel.down.some.0.alternative')); | ||
{ | ||
path: 'to get here' | ||
} | ||
``` | ||
## Acknowledgements | ||
@@ -103,0 +142,0 @@ * Michael Dvorkin for [Awesome Print] |
@@ -0,1 +1,2 @@ | ||
var Hoek = require('hoek'); | ||
var Lab = require('lab'); | ||
@@ -34,3 +35,3 @@ var Purdy = require('../'); | ||
var out = Purdy.stringify(circularObj); | ||
expect(out).to.equal('{\n \u001b[1m\u001b[37ma\u001b[39m\u001b[22m: \u001b[1m\u001b[90m[Circular]\u001b[39m\u001b[22m\n}'); | ||
expect(out).to.equal('{\n \u001b[1m\u001b[37m a\u001b[39m\u001b[22m: \u001b[1m\u001b[90m[Circular]\u001b[39m\u001b[22m\n}'); | ||
out = Purdy.stringify(circ); | ||
@@ -132,2 +133,3 @@ expect(out).to.equal('[\n [\u001b[1m\u001b[37m0\u001b[39m\u001b[22m] \u001b[1m\u001b[90m[Circular]\u001b[39m\u001b[22m\n]'); | ||
}); | ||
expect(out).to.equal('{\n \u001b[1m\u001b[37m array\u001b[39m\u001b[22m: [\n [\u001b[1m\u001b[37m0\u001b[39m\u001b[22m] \u001b[1m\u001b[34m1\u001b[39m\u001b[22m,\n [\u001b[1m\u001b[37m1\u001b[39m\u001b[22m] \u001b[1m\u001b[34m2\u001b[39m\u001b[22m,\n [\u001b[1m\u001b[37m2\u001b[39m\u001b[22m] [\n [\u001b[1m\u001b[37m0\u001b[39m\u001b[22m] \u001b[1m\u001b[34m1\u001b[39m\u001b[22m,\n [\u001b[1m\u001b[37m1\u001b[39m\u001b[22m] \u001b[1m\u001b[34m2\u001b[39m\u001b[22m\n ]\n ],\n \u001b[1m\u001b[37mobject\u001b[39m\u001b[22m: {\n \u001b[1m\u001b[37manother\u001b[39m\u001b[22m: \u001b[33m\'string\'\u001b[39m\n }\n}'); | ||
@@ -146,3 +148,23 @@ done(); | ||
it('will keep a path for an object in Hoek format', function (done) { | ||
var obj = { | ||
travel: { | ||
down: { | ||
a: [{ | ||
path: 'to get here' | ||
}] | ||
} | ||
} | ||
}; | ||
var orig = Hoek.clone(obj); | ||
var out = Purdy.stringify(obj, { plain: false, path: true }); | ||
expect(out).to.equal('{\n \u001b[1m\u001b[37mtravel\u001b[39m\u001b[22m: {\n \u001b[34m// \u001b[39m\u001b[34mtravel.down\u001b[39m\n \u001b[1m\u001b[37mdown\u001b[39m\u001b[22m: {\n \u001b[34m// \u001b[39m\u001b[34mtravel.down.a\u001b[39m\n \u001b[1m\u001b[37m a\u001b[39m\u001b[22m: [\n \u001b[34m// \u001b[39m\u001b[34mtravel.down.a.0\u001b[39m\n [\u001b[1m\u001b[37m0\u001b[39m\u001b[22m] {\n \u001b[34m// \u001b[39m\u001b[34mtravel.down.a.0.path\u001b[39m\n \u001b[1m\u001b[37mpath\u001b[39m\u001b[22m: \u001b[33m\'to get here\'\u001b[39m\n }\n ]\n }\n }\n}'); | ||
expect(obj).to.deep.equal(orig); | ||
done(); | ||
}); | ||
}); | ||
Sorry, the diff of this file is not supported yet
15906
291
143
2