UNPKG

2.65 kBJavaScriptView Raw
1var moment = require('moment');
2
3var CoreObject = require('core-object');
4var Promise = require('ember-cli/lib/ext/promise');
5
6module.exports = CoreObject.extend({
7 init: function(plugin, revisions) {
8 this._plugin = plugin;
9 this.revisions = revisions;
10 },
11
12 log: function() {
13 this._plugin.log.apply(this._plugin, arguments);
14 },
15
16 display: function() {
17 var revisions = this.revisions;
18 var keys = this._getKeys(revisions);
19
20 this._displayHeader(keys, revisions);
21
22 revisions.forEach(function(revision) {
23 this._displayRow(keys, revision);
24 }.bind(this));
25 },
26
27 _displayRow: function(keys, revision) {
28 var row = "";
29 if(revision.active) {
30 row += ">";
31 } else {
32 row += " ";
33 }
34
35 var lastKey = keys[keys.length - 1];
36
37 keys.forEach(function(key) {
38 var value = revision[key.name] ? revision[key.name] : "";
39
40 if(key.name === 'timestamp') {
41 value = moment(value).format("YYYY/MM/DD HH:mm:ss");
42 }
43
44 if(key.maxLength !== -1) {
45 value = String(value).substr(0, key.maxLength);
46 }
47
48 row += " " + value + " ";
49
50 var fillerLength = key.maxLength - value.length;
51 for(var i = 0; i < fillerLength; i++) {
52 row += " ";
53 }
54 if(key !== lastKey) {
55 row += "|";
56 }
57 });
58
59 this.log(row);
60 },
61
62 _getKeys: function(revisions) {
63 var keys = [
64 {name: 'version', maxLength: 7},
65 {name: 'timestamp', maxLength: 19},
66 {name: 'deployer', maxLength: 10},
67 {name: 'revision', maxLength: -1}
68 ];
69 var presentKeys = [];
70 keys.forEach(function(key) {
71 if(this._hasKey(key.name, revisions)) {
72 presentKeys.push(key);
73 }
74 }.bind(this));
75 return presentKeys;
76 },
77
78 _displayHeader: function(keys) {
79 var keyHeader = " ";
80 var lastKey = keys[keys.length - 1];
81
82 keys.forEach(function(key) {
83 var shortKey = key.maxLength === -1 ? key.name : key.name.substr(0, key.maxLength);
84 keyHeader += " " + shortKey + " ";
85
86 var fillerLength = key.maxLength === -1 ? 0 : key.maxLength - shortKey.length;
87 for(var i = 0; i < fillerLength; i++) {
88 keyHeader += " ";
89 }
90
91 // revision hash needs an unknown amount of space, don't display closing |
92 if(key !== lastKey) {
93 keyHeader += "|";
94 }
95 });
96 this.log(keyHeader);
97
98 var underline = "";
99 for(var i = 0; i < keyHeader.length; i++) {
100 underline += "=";
101 }
102 this.log(underline);
103 },
104 _hasKey: function(key, revisions) {
105 return revisions.some(function(revision) {
106 return Object.keys(revision).indexOf(key) !== -1;
107 });
108 }
109});