'use strict';
/**
* returns a string that's used in an express router that's always prefixed with a preceding '/'
*
* @param {String} adminPath
* @returns {String} route used for express router, that's always prefixed with a "/"
*/
function _route_prefix(adminPath) {
return (adminPath === '')
? '/'
: (adminPath && adminPath.charAt(0) === '/')
? adminPath
: '/' + adminPath;
}
/**
* returns a route string without the precending '/'
*
* @param {String} adminPath
* @returns {String}
*/
function _admin_prefix(adminPath) {
return _route_prefix(adminPath).substr(1);
}
/**
* returns a route string that always has a preceding '/' and a suffixed '/', this is typically used for specifiying links to paths as absolute urls
*
* @param {String} adminPath
* @returns {String}
*/
function _manifest_prefix(adminPath) {
var admin_prefix = _admin_prefix(adminPath);
return (admin_prefix.length > 0)
? '/'+admin_prefix+'/'
: '/';
}
/**
* short hand function to return all prefix types
*
* @param {String} adminPath
* @returns {String}
*/
function all_prefixes(adminPath){
return {
route_prefix : _route_prefix(adminPath),
admin_prefix : _admin_prefix(adminPath),
manifest_prefix : _manifest_prefix(adminPath),
};
}
function splitModelNameReducer(result, model_name) {
let split = model_name.split('_');
let parent = split.shift();
let child = split.join('_');
result[parent] = result[parent] || [];
result[parent].push(child);
return result;
}
function regexModelNameReducer(result, model_name) {
let [parent, child, ] = model_name.replace(/^([^\s_]+)_{1}(.+)$/, '$1 $2').split(' ');
result[parent] = result[parent] || [];
result[parent].push(child);
return result;
}
/**
* Enforces the shape of an api response, by allow for three properties (result,status and data) all other properties are on data
*
* @param {string} options.result result of request (usually sucess or error)
* @param {number} options.status http resonse code equivalent
* @param {object} options.data data for response
* @returns {object} with the shape {result,status,data}
*/
function formatResponse(options = {}) {
const formattedOptions = Object.keys(options).reduce((result, key) => {
if (key === 'result') {
result[ key ] = options[ key ].toString();
} else if (key === 'status') {
result[ key ] = parseInt(options[ key ], 10);
} else if(key==='data'){
result.data = Object.assign({},result.data,options[ key ]);
} else {
result.data[ key ] = options[ key ];
}
return result;
}, { data: {}, });
return Object.assign({}, {
result: 'success',
status: 200,
data:{},
}, formattedOptions);
}
module.exports = {
splitModelNameReducer,
regexModelNameReducer,
all_prefixes,
formatResponse,
route_prefix : _route_prefix,
admin_prefix : _admin_prefix,
manifest_prefix : _manifest_prefix,
};