class-o-mat
Version:
ALPHA VERSION ONLY: class-o-mats will help to create getter-setter functionality with validations that can be attached to a container class for easier coding. Some basic validations are included. class-o-mats also has the ability to store params as bloc
114 lines (88 loc) • 3.72 kB
JavaScript
import Bunyan from 'bunyan';
const log = Bunyan.createLogger({name: "Plugin"});
import mixin from 'mixin-decorator';
import {
NONE,
FIELD_O_MAT,
PLUGIN,
PLUGIN_APPENDER,
PLUGIN_PREPENDER
} from '../constants/types';
import FieldOMat from '../class-o-mat/field-o-mat';
import ChildOMatOMat from '../class-o-mat/child-o-mat-adder';
import RadioOMat from '../class-o-mat/radio-o-mat';
import buildClassMethods from '../methods/build-class';
import {
appendMethod,
prependMethod,
appendConstructor,
prependConstructor
} from './plugin-methods';
import ClassOMat from '../class-o-mat/class-o-mat';
const appenderOMat = new ClassOMat('appender');
appenderOMat.field('toConstructor').validate().method().$().onSet(appendConstructor);
const prependerOMat = new ClassOMat('prepender');
prependerOMat.field('toConstructor').validate().method().$().onSet(prependConstructor);
const buildClassMethodKeys = Object.keys(buildClassMethods);
buildClassMethodKeys.forEach((key)=>{
appenderOMat.field(key).validate().method().$().onSet(appendMethod);
prependerOMat.field(key).validate().method().$().onSet(prependMethod);
});
const fieldOMat = new ClassOMat('fieldOMat').BaseClass(FieldOMat);
const fieldOMatInitializer =(fieldOMat, plugin, key)=>fieldOMat.init(plugin, key);
// const childOMatOMat = new ClassOMat('childOMatOMat').BaseClass(ChildOMatOMat);
// const childOMatOMatInitializer =(childOMatOMat, plugin, key)=>childOMatOMat.init(plugin, key);
const pluginOMat = new ClassOMat('plugin');
pluginOMat.cacheOMats(true);
pluginOMat.field('controller').validate().object().$()
.field('FieldOMatMixins').default({}).validate().object().$()
.field('key').default('plugin that needs a name').validate().string().$()
.field('buildMethods').default(buildClassMethods).validate().object().$()
.field('mixins').default({}).validate().object().$()
.field('addMixins').default({}).internalKey('mixins').validate().object().$()
.field('onGet').stack().validate().method().$()
.again('onSet');
pluginOMat.addChild(fieldOMat)
.initializer(fieldOMatInitializer)
.accessChildAs('fieldOMats').as$('field')
.addChild(appenderOMat).singleton().as$('append')
.addChild(prependerOMat).singleton().as$('prepend')
class BasePlugin {
static VERSION = '0.6.0';
VERSION = '0.6.0';
static TYPE = PLUGIN;
TYPE = PLUGIN;
init(key) {
this._params.key = key;
return this;
}
connect(classOMat) {
const {key, buildMethods, FieldOMatMixins, mixins} = this._params;
const onGet = this.onGet().values();
const onSet = this.onSet().values();
const comParams = classOMat._params;
const {FieldOMat} = comParams;
(FieldOMatMixins)
class NewFieldOMat extends FieldOMat { };
comParams.buildMethods = { ...buildMethods, ...this.buildMethods}
comParams.mixins = {...mixins, ...comParams.mixins};
comParams.FieldOMat = NewFieldOMat;
classOMat.params(comParams);
onGet.forEach((onGetFunk)=>classOMat.onGet(onGetFunk));
onSet.forEach((onGetFunk)=>classOMat.onSet(onGetFunk));
const fieldOMats = this.fieldOMats();
if (Array.isArray(fieldOMats) === false) {
fieldOMats.init(classOMat, fieldOMats._params.key);
classOMat._acceptFieldOMat(fieldOMats)
return
}
fieldOMats.forEach((fieldOMat)=>{
classOMat._acceptFieldOMat(fieldOMat);
fieldOMat.init(classOMat, fieldOMat._params.key);
}
);
}
}
pluginOMat.BaseClass(BasePlugin);
const Plugin = pluginOMat.$();
export { Plugin as default, pluginOMat }