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
67 lines (49 loc) • 1.44 kB
JavaScript
import Bunyan from 'bunyan';
const log = Bunyan.createLogger({name: "ApiFieldOMat"});
import { NONE, API_FIELD_O_MAT } from '../constants/types';
import FieldOMat from './field-o-mat';
import BaseApiField from '../prototype/api-field';
import BaseApiFieldDynamic from '../prototype/api-field-dynamic';
/**
* This will allow a pre-determined type of field to
* be added at different points in the API as determined
* by the using author.
*/
class ApiFieldOMat {
TYPE = API_FIELD_O_MAT;
constructor(parent, key, params=NONE) {
this._params = {
parent,
key,
dynamic: false,
fieldOMat: new FieldOMat().init(parent, key),
}
}
$() {
return this._params.parent;
}
default(_default=NONE) {
if (_default === NONE) return this._params.fieldOMat._default();
return this._params.fieldOMat.default(_default);
}
field() {
return this._params.fieldOMat;
}
dynamic() {
this._params.dynamic = true;
return this;
}
key() {
return this._params.key;
}
addToClassMixins(mixins, paramObjectKey = '_params') {
const { key, dynamic, fieldOMat } = this._params;
const BaseField = dynamic === true ? BaseApiFieldDynamic : BaseApiField;
class ApiField extends BaseField { }
mixins[key] = function(key) {
return new ApiField(this, fieldOMat, paramObjectKey, key);
}
return mixins;
}
}
export default ApiFieldOMat;