expose line operators

closes #6
This commit is contained in:
Jannis R 2018-01-05 18:46:19 +01:00
parent 951c26c45a
commit d7eca5b4d1
No known key found for this signature in database
GPG key ID: 0FE83946296A88A5
8 changed files with 110 additions and 66 deletions

View file

@ -88,7 +88,12 @@ The response may look like this:
metro: false,
express: false,
night: false,
productCode: 0
productCode: 0,
operator: {
type: 'operator',
id: 's-bahn-berlin-gmbh',
name: 'S-Bahn Berlin GmbH'
}
},
direction: 'S Spandau'
}, {
@ -110,7 +115,8 @@ The response may look like this:
metro: false,
express: false,
night: false,
productCode: 0
productCode: 0,
operator: { /* … */ }
},
direction: 'S Westkreuz'
}, {
@ -149,7 +155,8 @@ The response may look like this:
metro: false,
express: false,
night: false,
productCode: 1
productCode: 1,
operator: { /* … */ }
},
direction: 'U Rudow'
} ]

View file

@ -105,7 +105,12 @@ The response looked like this:
metro: false,
express: false,
night: false,
productCode: 0
productCode: 0,
operator: {
type: 'operator',
id: 's-bahn-berlin-gmbh',
name: 'S-Bahn Berlin GmbH'
}
},
direction: 'S Spandau',
passed: [ /* … */ ]

View file

@ -143,7 +143,12 @@ The response may look like this:
metro: false,
express: false,
night: false,
productCode: 0
productCode: 0,
operator: {
type: 'operator',
id: 's-bahn-berlin-gmbh',
name: 'S-Bahn Berlin GmbH'
}
},
direction: 'S Potsdam Hauptbahnhof',
passed: [ {

View file

@ -51,7 +51,12 @@ The response may look like this:
nr: 9,
metro: false,
express: false,
night: false
night: false,
operator: {
type: 'operator',
id: 's-bahn-berlin-gmbh',
name: 'S-Bahn Berlin GmbH'
}
},
direction: 'S Flughafen Berlin-Schönefeld',
trip: 31463,
@ -118,7 +123,12 @@ The response may look like this:
nr: 2,
metro: true,
express: false,
night: false
night: false,
operator: {
type: 'operator',
id: 'berliner-verkehrsbetriebe',
name: 'Berliner Verkehrsbetriebe'
}
},
direction: 'Heinersdorf',
trip: 26321,

View file

@ -45,15 +45,16 @@ const request = (profile, data) => {
if (Array.isArray(c.locL)) {
d.locations = c.locL.map(loc => profile.parseLocation(profile, loc))
}
if (Array.isArray(c.prodL)) {
d.lines = c.prodL.map(line => profile.parseLine(profile, line))
}
if (Array.isArray(c.remL)) {
d.remarks = c.remL.map(rem => profile.parseRemark(profile, rem))
}
if (Array.isArray(c.opL)) {
d.operators = c.opL.map(op => profile.parseOperator(profile, op))
}
if (Array.isArray(c.prodL)) {
const parse = profile.parseLine(profile, d.operators)
d.lines = c.prodL.map(parse)
}
return d
})
}

View file

@ -2,7 +2,7 @@
const crypto = require('crypto')
const _parseLine = require('../../parse/line')
const _createParseLine = require('../../parse/line')
const _createParseJourney = require('../../parse/journey')
const _formatStation = require('../../format/station')
const createParseBitmask = require('../../parse/products-bitmask')
@ -52,8 +52,11 @@ const transformJourneysQuery = (query, opt) => {
return query
}
const parseLine = (profile, l) => {
const res = _parseLine(profile, l)
const createParseLine = (profile, operators) => {
const parseLine = _createParseLine(profile, operators)
const parseLineWithMode = (l) => {
const res = parseLine(l)
res.mode = res.product = null
if ('class' in res) {
@ -66,6 +69,8 @@ const parseLine = (profile, l) => {
return res
}
return parseLineWithMode
}
const createParseJourney = (profile, stations, lines, remarks) => {
const parseJourney = _createParseJourney(profile, stations, lines, remarks)
@ -144,7 +149,7 @@ const dbProfile = {
products: modes.allProducts,
// todo: parseLocation
parseLine,
parseLine: createParseLine,
parseProducts: createParseBitmask(modes.bitmasks),
parseJourney: createParseJourney,

View file

@ -6,7 +6,7 @@ const parseLineName = require('vbb-parse-line')
const parseTicket = require('vbb-parse-ticket')
const getStations = require('vbb-stations')
const _parseLine = require('../../parse/line')
const _createParseLine = require('../../parse/line')
const _parseLocation = require('../../parse/location')
const _createParseJourney = require('../../parse/journey')
const _createParseStopover = require('../../parse/stopover')
@ -28,8 +28,11 @@ const transformReqBody = (body) => {
return body
}
const parseLine = (profile, l) => {
const res = _parseLine(profile, l)
const createParseLine = (profile, operators) => {
const parseLine = _createParseLine(profile, operators)
const parseLineWithMode = (l) => {
const res = parseLine(l)
res.mode = res.product = null
if ('class' in res) {
@ -49,6 +52,8 @@ const parseLine = (profile, l) => {
return res
}
return parseLineWithMode
}
const parseLocation = (profile, l) => {
const res = _parseLocation(profile, l)
@ -169,7 +174,7 @@ const vbbProfile = {
parseStationName: shorten,
parseLocation,
parseLine,
parseLine: createParseLine,
parseProducts: createParseBitmask(modes.bitmasks),
parseJourney: createParseJourney,
parseDeparture: createParseDeparture,

View file

@ -3,8 +3,8 @@
const slugg = require('slugg')
// todo: are p.number and p.line ever different?
// todo: operator from p.oprX?
const parseLine = (profile, p) => {
const createParseLine = (profile, operators) => {
const parseLine = (p) => {
if (!p) return null // todo: handle this upstream
const res = {
type: 'line',
@ -27,7 +27,13 @@ const parseLine = (profile, p) => {
// todo: parse mode, remove from profiles
return res
if ('number' === typeof p.oprX) {
res.operator = operators[p.oprX] || null
}
module.exports = parseLine
return res
}
return parseLine
}
module.exports = createParseLine