diff options
| author | Sean Fridman <fridman@mail.sfsu.edu> | 2015-04-08 16:05:56 -0400 |
|---|---|---|
| committer | Sean Fridman <fridman@mail.sfsu.edu> | 2015-04-08 16:07:15 -0400 |
| commit | 565feb87740dcc693be50f8dbde4887e4ebdc79f (patch) | |
| tree | 28dae4359936c05ca7df20a7e2bb11c9490e6a0f /app/node_modules/okview/index.js | |
| parent | 5d676437f64791b435d7554d9ec4f4628d0abcc3 (diff) | |
Move fetchTemplateData back into OKAdminView
Diffstat (limited to 'app/node_modules/okview/index.js')
| -rw-r--r-- | app/node_modules/okview/index.js | 56 |
1 files changed, 55 insertions, 1 deletions
diff --git a/app/node_modules/okview/index.js b/app/node_modules/okview/index.js index 1ceac03..5f3a8c9 100644 --- a/app/node_modules/okview/index.js +++ b/app/node_modules/okview/index.js @@ -1,4 +1,7 @@ -var fetchTemplateData = require('okutil').fetchTemplateData; +var assign = require('object-assign'); +var pluralize = require('pluralize'); +var isarray = require('lodash.isarray'); +var Q = require('q'); var OKResource = require('okresource'); // Routes for views over collections have a special pattern @@ -129,4 +132,55 @@ function getParamName(route) { return matches[1]; } +/** + * Takes a meta data query and an array of resource queries + * and returns a promise for an object merging all queried + * data, pluralizing keys where necessary. + * + * Lil bit convoluted, sorry. + */ +function fetchTemplateData(meta, queries) { + return Q.promise(function(resolve, reject) { + return Q.all( + [meta.get()].concat(queries.map(function(query) { + return query.get(); + }))) + .then(function(results) { + var metadata = results.shift(); + var normalized = results.reduce(function(cache, result, i) { + // Huh? Bail + if (!result) + return cache; + var resource = queries[i].resource; + var type = queries[i].type; + var manyResult = isarray(result); + // Inform template of ID in generic field + if (manyResult) { + result = result.map(function(data) { + return assign({}, data, {id: data[resource.idField]}) + }); + } else { + result = assign({}, result, {id: result[resource.idField]}); + } + // If we have a lot of results for a certain type, + // we pluralize the key and yield an array of results + if (cache[type] || manyResult) { + var plural = pluralize(type); + delete cache[type]; + cache[plural] = []; + if (manyResult) { + cache[plural] = cache[plural].concat(result); + } else { + cache[plural].push(result); + } + } else { + cache[type] = result; + } + return cache; + }, {meta: metadata}); + resolve(normalized); + }).fail(reject); + }); +} + module.exports = OKView; |
