1 | 'use strict';
|
2 |
|
3 | var _ = require('lodash');
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 | function templateParams(url) {
|
12 | return url.match(/:([^/]+)/g);
|
13 | }
|
14 |
|
15 |
|
16 |
|
17 |
|
18 |
|
19 |
|
20 |
|
21 | function template(url, params) {
|
22 | var templated = url;
|
23 | var keys = _.keys(params);
|
24 | var loweredKeys = _.map(keys, function (key) {
|
25 | return key.toLowerCase();
|
26 | });
|
27 | var keyLookup = _.zipObject(loweredKeys, keys);
|
28 |
|
29 | _.each(templateParams(url), function replaceParam(param) {
|
30 | var normalisedParam = param.toLowerCase().substr(1);
|
31 |
|
32 | if (!keyLookup[normalisedParam]) {
|
33 | throw new Error('Missing ' + normalisedParam);
|
34 | }
|
35 |
|
36 | templated = templated.replace(param,
|
37 | params[keyLookup[normalisedParam]]);
|
38 | delete params[keyLookup[normalisedParam]];
|
39 | });
|
40 |
|
41 | return templated;
|
42 | }
|
43 |
|
44 | module.exports = exports = {
|
45 | templateParams: templateParams,
|
46 | template: template
|
47 | };
|
48 |
|