UNPKG

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
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;