pull out bitmask parsing from profiles

This commit is contained in:
Jannis R 2017-11-27 19:39:18 +01:00
parent 3fb0943680
commit ed0dfd06dd
No known key found for this signature in database
GPG key ID: 0FE83946296A88A5
6 changed files with 42 additions and 42 deletions

View file

@ -0,0 +1,14 @@
'use strict'
const createFormatBitmask = (modes) => {
const formatBitmask = (products) => {
let bitmask = 0
for (let product in products) {
if (products[product] === true) bitmask += modes[product].bitmask
}
return bitmask
}
return formatBitmask
}
module.exports = createFormatBitmask

View file

@ -4,11 +4,15 @@ const crypto = require('crypto')
const _formatStation = require('../../format/station') const _formatStation = require('../../format/station')
const _parseLine = require('../../parse/line') const _parseLine = require('../../parse/line')
const createParseBitmask = require('../../parse/products-bitmask')
const createFormatBitmask = require('../../format/products-bitmask')
const {accessibility, bike} = require('../../format/filters') const {accessibility, bike} = require('../../format/filters')
const modes = require('./modes') const modes = require('./modes')
const formatLoyaltyCard = require('./loyalty-cards').format const formatLoyaltyCard = require('./loyalty-cards').format
const formatBitmask = createFormatBitmask(modes)
const transformReqBody = (body) => { const transformReqBody = (body) => {
body.client = {id: 'DB', v: '16040000', type: 'IPH', name: 'DB Navigator'} body.client = {id: 'DB', v: '16040000', type: 'IPH', name: 'DB Navigator'}
body.ext = 'DB.R15.12.a' body.ext = 'DB.R15.12.a'
@ -87,7 +91,7 @@ const formatProducts = (products) => {
return { return {
type: 'PROD', type: 'PROD',
mode: 'INC', mode: 'INC',
value: modes.stringifyBitmask(products) + '' value: formatBitmask(products) + ''
} }
} }
@ -102,7 +106,7 @@ const dbProfile = {
// todo: parseLocation // todo: parseLocation
parseLine, parseLine,
parseProducts: modes.parseBitmask, parseProducts: createParseBitmask(modes.bitmasks),
formatStation, formatStation,
formatProducts formatProducts

View file

@ -91,23 +91,4 @@ m.bitmasks[128] = m.subway
m.bitmasks[256] = m.tram m.bitmasks[256] = m.tram
m.bitmasks[512] = m.taxi m.bitmasks[512] = m.taxi
// todo: move up
m.stringifyBitmask = (products) => {
let bitmask = 0
for (let product in products) {
if (products[product] === true) bitmask += m[product].bitmask
}
return bitmask
}
// todo: move up
m.parseBitmask = (bitmask) => {
let products = {}, i = 1
do {
products[m.bitmasks[i].product] = !!(bitmask & i)
i *= 2
} while (m.bitmasks[i] && m.bitmasks[i].product)
return products
}
module.exports = m module.exports = m

View file

@ -6,9 +6,13 @@ const {to12Digit, to9Digit} = require('vbb-translate-ids')
const _formatStation = require('../../format/station') const _formatStation = require('../../format/station')
const _parseLine = require('../../parse/line') const _parseLine = require('../../parse/line')
const _parseLocation = require('../../parse/location') const _parseLocation = require('../../parse/location')
const createParseBitmask = require('../../parse/products-bitmask')
const createFormatBitmask = require('../../format/products-bitmask')
const modes = require('./modes') const modes = require('./modes')
const formatBitmask = createFormatBitmask(modes)
const transformReqBody = (body) => { const transformReqBody = (body) => {
body.client = {type: 'IPA', id: 'BVG'} body.client = {type: 'IPA', id: 'BVG'}
body.ext = 'VBB.2' body.ext = 'VBB.2'
@ -67,7 +71,7 @@ const formatProducts = (products) => {
return { return {
type: 'PROD', type: 'PROD',
mode: 'INC', mode: 'INC',
value: modes.stringifyBitmask(products) + '' value: formatBitmask(products) + ''
} }
} }
@ -79,7 +83,7 @@ const vbbProfile = {
parseStationName: shorten, parseStationName: shorten,
parseLocation, parseLocation,
parseLine, parseLine,
parseProducts: modes.parseBitmask, parseProducts: createParseBitmask(modes.bitmasks),
formatStation, formatStation,
formatProducts formatProducts

View file

@ -123,23 +123,4 @@ m.categories = [
// return m.categories[parseInt(category)] || m.unknown // return m.categories[parseInt(category)] || m.unknown
// } // }
// todo: move up
m.stringifyBitmask = (types) => {
let bitmask = 0
for (let type in types) {
if (types[type] === true) bitmask += m[type].bitmask
}
return bitmask
}
// todo: move up
m.parseBitmask = (bitmask) => {
let types = {}, i = 1
do {
types[m.bitmasks[i].type] = !!(bitmask & i)
i *= 2
} while (m.bitmasks[i] && m.bitmasks[i].type)
return types
}
module.exports = m module.exports = m

16
parse/products-bitmask.js Normal file
View file

@ -0,0 +1,16 @@
'use strict'
const createParseBitmask = (bitmasks) => {
const createBitmask = (bitmask) => {
const products = {}
let i = 1
do {
products[bitmasks[i].product] = !!(bitmask & i)
i *= 2
} while (bitmasks[i] && bitmasks[i].product)
return products
}
return createBitmask
}
module.exports = createParseBitmask