diff --git a/libs/middlewares/dimensions.js b/libs/middlewares/dimensions.js new file mode 100644 index 0000000000000000000000000000000000000000..c17e4a6d2e00c1e5dc47455f4959cf9f33a0ad09 --- /dev/null +++ b/libs/middlewares/dimensions.js @@ -0,0 +1,48 @@ +/** +* Dimensions middleware +* +* EXAMPLE: +* Use it with no parameters to get all the dimensions specified +* app.get('/', dimensions(), function(req, res, next){}) +* +* Use it with an array of accepted values +* app.get('/', dimensions(['year', 'location']), function(req, res, next){}) +* +* Use it globally +* app.use(dimensions()) +*/ + +function intersect(a, b) { + var t + if (b.length > a.length) t = b, b = a, a = t + return a.filter(function (e) { + if (b.indexOf(e) !== -1) return true + }) +} + +function dimensions(dims) { + return function(req, res, next) { + req.dims = {} + if(req.query.dims) { + var params = req.query.dims.split(",") + var dimObj = {} + for(var i=0; i<params.length; ++i) { + var kv = params[i].split(":") + dimObj[kv[0]] = (typeof kv[1] === 'undefined') ? null : kv[1] + } + // If the dims array exists and is not empty + if(typeof dims !== 'undefined' && dims.length > 0) { + var intersection = intersect(dims, Object.keys(dimObj)) + for(var i=0; i<intersection.length; ++i) { + req.dims[intersection[i]] = dimObj[intersection[i]] + } + } else { + req.dims = dimObj + } + } + console.log(req.dims) + next() + } +} + +module.exports = dimensions