-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathexplain.js
More file actions
53 lines (43 loc) · 1.76 KB
/
explain.js
File metadata and controls
53 lines (43 loc) · 1.76 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
// const colour = require('colour')
import colour from 'colour';
import { containsVerb } from './helpers';
const LINK_PREFIX = 'btc:'
function explain(el) {
function showProperties(obj) {
if (!obj) return;
var list = Object.keys(obj).filter(function(k) { return k[0] != '_' })
.map(function(k) { return ' ' + k.cyan + ': ' + obj[k] })
console.log(list.join('\n'));
}
function showLinks(obj) {
if (!obj) return;
var desc, list = Object.keys(obj).sort().map(function(k) {
desc = (containsVerb(k) || (obj[k].method || 'get') != 'get') ? 'Action' : (k[k.length-1] == 's' ? 'Collection' : 'Entity')
return ' ' + k.replace(LINK_PREFIX, '').cyan + ' (' + desc + '): ' + (obj[k].title || 'No description');
});
console.log(('\n -- Entity/Collection Links:').bold)
console.log(list.filter(function(str) { return !str.match('(Action)')} ).join('\n'))
console.log(('\n -- Action Links:').bold)
console.log(list.filter(function(str) { return str.match('(Action)')} ).join('\n'))
}
function showEmbedded(obj) {
if (!obj) return;
var desc, list = Object.keys(obj).map(function(k) {
desc = Array.isArray(obj[k]) ? 'Collection' : 'Entity';
return ' ' + k.cyan + ': ' + desc
});
console.log(list.join('\n'));
}
return function explain(opts) {
if (opts)
return console.log(JSON.stringify(el._data, null, 2));
var type = el._data ? (el._data._class || [])[0] : null;
console.log(('\n ' + (type || el.constructor.name)).blue)
console.log(('\n -- Properties').bold); showProperties(el._data);
console.log(('\n -- Embedded').bold); showEmbedded(el._embedded);
showLinks(el._links);
console.log()
}
}
export default explain;
// module.exports = explain