From b7269e65cc7c26e8af5303adb2435e1c63a9edff Mon Sep 17 00:00:00 2001
From: Vytor Calixto <vytorcalixto@gmail.com>
Date: Wed, 31 Aug 2016 11:48:56 -0300
Subject: [PATCH] Add value detection in dimensions

---
 libs/middlewares/dimensions.js | 59 ++++++++++++++++++++--------------
 1 file changed, 34 insertions(+), 25 deletions(-)

diff --git a/libs/middlewares/dimensions.js b/libs/middlewares/dimensions.js
index 27d58036..c17e4a6d 100644
--- a/libs/middlewares/dimensions.js
+++ b/libs/middlewares/dimensions.js
@@ -1,39 +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())
- */
+* 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
+        if (b.indexOf(e) !== -1) return true
     })
 }
 
 function dimensions(dims) {
-  return function(req, res, next) {
-    if(req.query.dims) {
-      params = req.query.dims.split(",")
-      // If the dims array exists and is not empty
-      if(typeof dims !== 'undefined' && dims.length > 0) {
-        req.dims = intersect(dims, params)
-      } else {
-        req.dims = params
-      }
+    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()
     }
-    console.log(req.dims)
-    next()
-  }
 }
 
 module.exports = dimensions
-- 
GitLab