refactor: minimize repeated code by re-using parseInclude, parseWhere and getMethod

feat(include): ability to specify multiple includes, as an array
This commit is contained in:
Mahdi Dibaiee
2016-03-10 10:48:30 +03:30
parent 00e8e89767
commit 11291f0e08
8 changed files with 226 additions and 257 deletions

39
src/utils.js Normal file
View File

@ -0,0 +1,39 @@
import { omit } from 'lodash';
export const parseInclude = request => {
const include = Array.isArray(request.query.include) ? request.query.include
: [request.query.include];
return include.map(a => {
if (typeof a === 'string') return request.models[a];
if (a && typeof a.model === 'string' && a.model.length) {
a.model = request.models[a.model];
}
return a;
}).filter(a => a);
}
export const parseWhere = request => {
const where = omit(request.query, 'include');
for (const key of Object.keys(where)) {
try {
where[key] = JSON.parse(where[key]);
} catch (e) {
//
}
}
return where;
}
export const getMethod = (model, association, plural = true, method = 'get') => {
const a = plural ? association.original.plural : association.original.singular;
const b = plural ? association.original.singular : association.original.plural; // alternative
const fn = model[`${method}${a}`] || model[`${method}${b}`];
if (fn) return fn.bind(model);
return false;
}