From 09866a9a08d295542db6af6b1ec1be093fee8bbd Mon Sep 17 00:00:00 2001 From: Jannis R Date: Sun, 26 Jun 2016 18:14:41 +0200 Subject: [PATCH] more granular overriding of defaults --- index.js | 65 +++++++++++++++++++++++++++++++++----------------------- 1 file changed, 38 insertions(+), 27 deletions(-) diff --git a/index.js b/index.js index f28f7647..fdb4b31e 100644 --- a/index.js +++ b/index.js @@ -5,37 +5,48 @@ const parse = require('./parse') -const onData = (d) => { - if (!d.common) return d - const c = d.common - if (Array.isArray(c.locL)) d.locations = c.locL.map(parse.location) - if (Array.isArray(c.prodL)) d.products = c.prodL.map(parse.product) - if (Array.isArray(c.remL)) d.remarks = c.remL.map(parse.remark) - if (Array.isArray(c.opL)) d.agencies = c.opL.map(parse.agency) - return d +const id = (x) => x +const defaults = { + onBody: id, + onReq: id, + onLocation: parse.location, + onProduct: parse.product, + onRemark: parse.remark, + onAgency: parse.agency } -const request = (cfg) => (data) => { - let body = {lang: 'en', svcReqL: [data]} - if (cfg.onBody) body = cfg.onBody(body) - let req = { - json: true, body: JSON.stringify(body), - headers: { - 'Content-Type': 'application/json', - 'Accept-Encoding': 'gzip, deflate' - } + +const request = (opt) => { + opt = Object.assign({}, defaults, opt) + + return (data) => { + const body = opt.onBody({lang: 'en', svcReqL: [data]}) + const req = opt.onReq({ + json: true, body: JSON.stringify(body), + headers: { + 'Content-Type': 'application/json', + 'Accept-Encoding': 'gzip, deflate' + } + }) + + return got.post(opt.endpoint, req) + .then((res) => { + const b = res.body + + if (b.err) return new Error(b.err) + if (!b.svcResL || !b.svcResL[0]) return new Error('invalid response') + if (b.svcResL[0].err !== 'OK') return new Error(b.svcResL[0].errTxt) + const d = b.svcResL[0].res + const c = d.common || {} + + if (Array.isArray(c.locL)) d.locations = c.locL.map(opt.onLocation) + if (Array.isArray(c.prodL)) d.products = c.prodL.map(opt.onProduct) + if (Array.isArray(c.remL)) d.remarks = c.remL.map(opt.onRemark) + if (Array.isArray(c.opL)) d.agencies = c.opL.map(opt.onAgency) + return d + }).catch((err) => err) } - if (cfg.onReq) req = cfg.onReq(req) - - return got.post(cfg.endpoint, req) - .then((res) => { - if (res.body.err) return new Error(res.body.err) - if (!res.body.svcResL || !res.body.svcResL[0]) return new Error('invalid response') - const data = res.body.svcResL[0] - if (data.err !== 'OK') return new Error(data.errTxt) - return cfg.onData || onData(data.res) - }).catch(console.error) } module.exports = request