erg
Version:
Erg time calculator
57 lines (40 loc) • 1.51 kB
text/coffeescript
_ = require('underscore')
Table = require('cli-table')
{ Wattage } = require('./wattage')
{ Distance } = require('./distance')
{ Duration } = require('./duration')
class Metrics
: {
'split': (split) -> Duration.fromString(split)
'wattage': (wattage) -> Wattage.fromString(wattage)
'distance': (distance) -> Distance.fromString(distance)
'duration': (duration) -> Duration.fromString(duration)
}
: {
'split': ['distance', 'duration']
'distance': ['duration', 'split']
'duration': ['distance', 'split']
}
: (metricStrings = []) =>
metricKeyValues = metricStrings.map (metricString) ->
[ key, value ] = metricString.match(/^(.+)=(.+)$/)[1..]
rawMetrics = {}
for [ metric, metricValue ] in metricKeyValues
throw new Error("Metric type [#{metric}] is unsupported") \
unless [metric]?
rawMetrics[metric] = [metric](metricValue)
new Metrics(rawMetrics)
constructor: (rawMetrics) ->
for metric in _.keys(Metrics.PARSERS)
@[metric] = rawMetrics[metric]
?= .multiply(500 / .value)
?= .multiply(.value / 500)
?= Wattage.fromSplit()
toTable: ->
table = new Table({
head: ['Distance', 'Duration', 'Split', 'Wattage']
colWidths: [10, 20, 15, 15]
})
table.push [ , , , ]
table.toString()
module.exports = { Metrics, Duration, Distance, Wattage }