UNPKG

calc-transporte

Version:
98 lines (79 loc) 3.08 kB
'use strict'; var defaultsValues = require('../data/default-values.json'); var defaults = require('lodash.defaults'); var flowRight = require('lodash.flowright'); var utils = require('./utils'); var clone = flowRight(JSON.parse, JSON.stringify); function Transport(values) { var self = this; values = defaults(clone(values || {}), defaultsValues); self.values = values } Transport.prototype.getTransports = function getTransports() { var self = this; return Object.keys(self.values); } Transport.prototype.getTrainLines = function getTrainLines() { var self = this; return Object.keys(self.values.train); } Transport.prototype.getPricesByDate = function getPricesByDate(date) { var self = this; var transports = self.getTransports(); var _result = {}; transports.forEach(function (transport) { self.getPricesByTransportAndDate(transport, date, _result); }); return _result; } Transport.prototype.getPricesByTransportAndDate = function getPricesByTransportAndDate(transport, date, _result) { var self = this; if (transport == 'train') { _result[transport] = {}; var lines = self.getTrainLines(); lines.forEach(function (line) { var _date = date; if (date === undefined || date == null) { _date = utils.formatDate(new Date()); } _date = utils.getClosestDate(_date, self.values[transport][line]); _result[transport][line] = { date: _date, values: null }; _result[transport][line].values = self.values[transport][line].find(function (element) { return element.date === _date; }).values; }); } else { var _date = date; if (date === undefined || date == null) { _date = utils.formatDate(new Date()); } _date = utils.getClosestDate(_date, self.values[transport]); _result[transport] = { date: _date, values: null }; _result[transport].values = self.values[transport].find(function (element) { return element.date === _date; }).values; } return _result; }; Transport.prototype.getPriceByTransportLineDateAndId = function getPriceByTransportLineDateAndId(transport, line, date, id) { var self = this; var transports = self.getTransports(); var _result = {}; self.getPricesByTransportAndDate(transport, date, _result); transports.forEach(function (transport) { self.getPricesByTransportAndDate(transport, date, _result); }); var data; if (transport == 'train') { data = _result[transport][line].values; } else { data = _result[transport].values; } var ids = data.map(function (o) { return o.id; }) ids.sort(utils.Comparator); var idToFind = utils.getNearest(ids, id); return data.find(function (element) { return element.id === idToFind; }).price; } module.exports = Transport;