conveyal/modeify

View on GitHub
client/profile-query/index.js

Summary

Maintainability
A
0 mins
Test Coverage
var clone = require('component-clone')
var defaults = require('../components/segmentio/model-defaults/0.2.0')
var model = require('component-model')

var ProfileRequest = module.exports = model('ProfileRequest')
  .use(defaults({
    accessModes: [],
    bikeSafe: 1,
    bikeSlope: 1,
    bikeSpeed: 4.1,
    bikeTime: 1,
    date: new Date(),
    directModes: [],
    endTime: 9,
    egressModes: [],
    from: [],
    limit: 2,
    startTime: 8,
    to: [],
    transitModes: [],
    walkSpeed: 1.4
  }))
  .attr('accessModes')
  .attr('bikeSafe')
  .attr('bikeSlope')
  .attr('bikeSpeed')
  .attr('bikeTime')
  .attr('date')
  .attr('directModes')
  .attr('endTime')
  .attr('egressModes')
  .attr('from')
  .attr('limit')
  .attr('startTime')
  .attr('to')
  .attr('transitModes')
  .attr('walkSpeed')

var arrays = ['accessModes', 'directModes', 'egressModes', 'from', 'to', 'transitModes']
var floats = ['bikeSpeed', 'walkSpeed']
var ints = ['bikeSafe', 'bikeSlope', 'bikeTime', 'endTime', 'limit', 'startTime']

ProfileRequest.fromJSON = function (json) {
  var attrs = clone(json)

  arrays.forEach(function (k) {
    attrs[k] = attrs[k] ? attrs[k].split(',') : []
  })

  floats.forEach(function (k) {
    attrs[k] = parseFloat(attrs[k])
  })

  ints.forEach(function (k) {
    attrs[k] = parseInt(attrs[k], 10)
  })

  attrs.date = new Date(attrs.date)
  attrs.from = [parseFloat(attrs.from[0]), parseFloat(attrs.from[1])]
  attrs.to = [parseFloat(attrs.to[0]), parseFloat(attrs.to[1])]

  return new ProfileRequest(attrs)
}

ProfileRequest.prototype.toJSON = function () {
  var pr = clone(this.attrs)

  arrays.forEach(function (k) {
    pr[k] = pr[k].join(',')
  })

  pr.date = pr.date.toISOString().split('T')[0]
  pr.endTime = pr.endTime + ':00'
  pr.startTime = pr.startTime + ':00'

  return pr
}