allex_libcloudexposurelib
Version:
AllexJS lib that generates the necessary glue code for exposing a lib via the Apartment/Hotel/Service chain
105 lines (96 loc) • 3.18 kB
JavaScript
function createUtils (execlib, templateslib, arrayopslib, outerlib) {
'use strict';
var lib = execlib.lib;
var mylib = {};
require('./historybuildercreator')(lib, templateslib, arrayopslib, outerlib);
require('./levelbasedhistorystagecreator')(lib, templateslib, arrayopslib, outerlib);
function quoter (thingy) {
return "'"+thingy+"'";
}
mylib.quoter = quoter;
function parameterProducer (methoddesc, index) {
return 'param' + (index>0 ? index : '');
}
mylib.parameterProducer = parameterProducer;
function makeUpDescriptors (descs) {
if (!descs) {
return [];
}
if (!lib.isArray(descs)) {
if (descs.title) {
return [descs];
}
return [];
}
return descs;
}
mylib.makeUpDescriptors = makeUpDescriptors;
function serviceInvocationFromDescriptors (descs) {
if (!descs) {
return null;
}
if (!lib.isArray(descs)) {
return descs;
}
return descs.length>0 ? descs[0] : null;
}
mylib.serviceInvocationFromDescriptors = serviceInvocationFromDescriptors;
function addMethodsMethodProducer (ret, methoddesc, methodname) {
ret.push('\t\t, '+quoter(methodname));
}
function produceAddMethodsMethodsFromServiceListeners (targetservicename, mixinname, res, servicedesc) {
if (!(servicedesc) && lib.isString(servicedesc.service)) {
return res;
}
if (targetservicename && targetservicename!=servicedesc.service) {
return res;
}
return lib.joinStringsWith(res, quoter('on'+servicedesc.service+'for'+mixinname), '\n\t\t,')
}
function produceAddMethodsMethods (desc) {
return lib.reduceShallow(desc, function (res, val, name) {
return lib.joinStringsWith(res, quoter(name), '\n\t\t,');
}, ' ');
}
function produceAddMethods (mixin, desc, targetservicename) {
var descname = desc.name;
var f = templateslib.process({
template: [
"var MIXINNAME = mixin;",
"MIXINNAME.addMethods = function (klass) {",
"\tlib.inheritMethods(klass, MIXINNAME",
"METHODS",
"\t);",
"};",
].join('\n'),
replacements: {
MIXINNAME: mixin.name,
METHODS: lib.joinStringsWith(
produceAddMethodsMethods(desc.alldesc||desc.desc),
(desc.services||[]).reduce(produceAddMethodsMethodsFromServiceListeners.bind(null, targetservicename, descname), ' '),
'\n'
)
}
});
targetservicename = null;
descname = null;
eval (f);
}
mylib.produceAddMethods = produceAddMethods;
function personalizedHash (hash) {
var i, arg, phash = {
gUserId: this.state.get('profile_user_id')
};
for (const spec of ['user_initials', 'master_user_id']) {
phash[spec] = this.state.get('profile_'+spec);
}
for (i=1; i<arguments.length; i++) {
arg = arguments[i];
phash[arg] = this.state.get('profile_'+arg);
}
return lib.extend({}, hash, phash);
}
mylib.personalizedHash = personalizedHash;
outerlib.utils = mylib;
}
module.exports = createUtils;