-
Notifications
You must be signed in to change notification settings - Fork 0
/
ticker.js
65 lines (52 loc) · 1.41 KB
/
ticker.js
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
54
55
56
57
58
59
60
61
62
63
64
65
const _ = require("lodash");
const GUI = require("./gui");
const Stats = require("./stats");
module.exports = class CryptoTicker {
constructor(config = {}) {
this.config = config;
this.client = client(config);
this.stats = new Stats(config);
this.gui = new GUI(
Object.assign(
config,
{
dataSource: this.refresh.bind(this)
}
)
);
setInterval(this.refresh.bind(this), config.updateInterval * 1000);
this.refresh();
}
refresh(){
this.client.getTicker((data) => {
addStats(this.stats, _.values(data));
const rows = _.keys(data).map(
symbol => columnsForCurrency(
this.config.columns,
data[symbol]
)
);
this.gui.refresh(rows);
});
}
};
/* private */
const columnsForCurrency = (columns, currencyData) => {
let key, value;
return columns.map((column) => {
key = column[1];
value = currencyData[key];
if (_.isUndefined(value)) value = "N/A";
return value;
});
};
const client = (config) => {
const lib = require(`./${config.dataSource}`);
return new lib(config);
};
const addStats = (stats, currenciesList) => {
const statsBySymbol = stats.update(currenciesList);
currenciesList.forEach((currencyData) => {
Object.assign(currencyData, statsBySymbol[currencyData.symbol]);
});
};