pathetic
Version:
Get values by path-like keys
48 lines (38 loc) • 996 B
JavaScript
var merge = require('merge');
var zipObject = require('zip-object');
var pathToRegexp = require('path-to-regexp');
var clone = require('clone');
var pathetic = function (table) {
return function (pathname) {
var keys = Object.keys(table);
var len = keys.length;
var i = 0;
var paramKeys = [];
var paramValues = [];
var key;
var rexp;
for(i; i < len; i += 1) {
//reset the values for paramKeys and paramValues from last iteration
paramKeys = [];
paramValues = [];
key = keys[i];
rexp = pathToRegexp(key, paramKeys);
matches = pathname.match(rexp);
if (matches) {
paramValues = matches.slice(1);
return {
key: key,
value: clone(table[key]),
params: zipObject(pluck(paramKeys, 'name'), paramValues)
};
}
}
};
};
function pluck (arr, key) {
return arr.map(mapper);
function mapper (item) {
return item[key];
}
}
module.exports = pathetic;