import stampit from 'stampit';
import EventEmitter from './eventemitter';
import Promise from 'bluebird';
import validate from 'validate.js';
/**
Validators used in the library.
**/
validate.Promise = Promise;
validate.validators.object = function(value) {
if(value) {
if(!validate.isObject(value)) {
return "is not an object";
}
}
return null;
}
validate.validators.array = function(value) {
if(value) {
if(!validate.isArray(value)) {
return "is not an array";
}
}
return null;
}
validate.validators.boolean = function(value) {
if(value) {
if(typeof value !== 'boolean') {
return "is not a boolean";
}
}
return null;
}
validate.validators.string = function(value) {
if(value) {
if(!validate.isString(value)) {
return "is not a string";
}
}
return null;
}
export {validate};
/**
* Simple wrapper around `EventEmitter`
* @constructor
* @type {EventEmittable}
* @example {@lang javascript}
* var EmittableModel = stampit().compose(EventEmittable);
*/
export const EventEmittable = stampit.convertConstructor(EventEmitter);
/**
* Used as a manager for {@link Syncano} base object. **Not** meant to be used directly.
* @constructor
* @type {ConfigMixin}
* @property {Syncano} _config private attribute which holds {@link Syncano} object
* @example {@lang javascript}
* var MyStamp = stampit().compose(ConfigMixin);
*/
export const ConfigMixin = stampit({
methods: {
/**
* Gets default properties.
* @memberOf ConfigMixin
* @instance
* @returns {Object}
* @example {@lang javascript}
* var MyStamp = stampit().compose(ConfigMixin);
* var config = MyStamp().getDefaultProperties();
*/
getDefaultProperties() {
return this._config.defaults;
},
/**
* Sets config.
* @memberOf ConfigMixin
* @instance
* @param {Syncano} config instance of {@link Syncano} object
* @returns {ConfigMixin}
* @example {@lang javascript}
* var MyStamp = stampit().compose(ConfigMixin);
* var newObject = MyStamp().setConfig({});
*/
setConfig(config) {
this._config = config;
return this;
},
/**
* Gets config.
* @memberOf ConfigMixin
* @instance
* @returns {Syncano}
* @example {@lang javascript}
* var MyStamp = stampit().compose(ConfigMixin);
* var config = MyStamp().getConfig();
*/
getConfig() {
return this._config;
}
},
static: {
getDefaultProperties() {
return this.fixed.refs._config.defaults;
},
/**
* Sets config and returns new {@link https://github.com/stampit-org/stampit|stampit} definition.
* @memberOf ConfigMixin
* @static
* @param {Syncano} config instance of {@link Syncano} object
* @returns {stampit}
* @example {@lang javascript}
* var MyStamp = stampit().compose(ConfigMixin).setConfig({});
*/
setConfig(config) {
return this.refs({_config: config});
},
/**
* Gets config from {@link https://github.com/stampit-org/stampit|stampit} definition.
* @memberOf ConfigMixin
* @static
* @returns {Syncano}
* @example {@lang javascript}
* var config = stampit().compose(ConfigMixin).getConfig();
*/
getConfig() {
return this.fixed.refs._config;
}
}
});
/**
* Used as a manager for {@link Meta} object. **Not** meant to be used directly.
* @constructor
* @type {MetaMixin}
* @property {Object} _meta private attribute which holds {@link Meta} object
* @example {@lang javascript}
* var MyStamp = stampit().compose(MetaMixin);
*/
export const MetaMixin = stampit({
methods: {
/**
* Sets meta.
* @memberOf MetaMixin
* @instance
* @param {Meta} meta instance of {@link Meta} object
* @returns {MetaMixin}
* @example {@lang javascript}
* var MyStamp = stampit().compose(MetaMixin);
* var newObject = MyStamp().setMeta({});
*/
setMeta(meta) {
this._meta = meta;
return this;
},
/**
* Gets meta.
* @memberOf MetaMixin
* @instance
* @returns {Meta}
* @example {@lang javascript}
* var MyStamp = stampit().compose(MetaMixin);
* var meta = MyStamp().getMeta();
*/
getMeta() {
return this._meta;
}
},
static: {
/**
* Sets meta and returns new {@link https://github.com/stampit-org/stampit|stampit} definition.
* @memberOf MetaMixin
* @static
* @param {Meta} meta instance of {@link Meta} object
* @returns {stampit}
* @example {@lang javascript}
* var MyStamp = stampit().compose(MetaMixin).setMeta({});
*/
setMeta(meta) {
return this.refs({_meta: meta});
},
/**
* Gets meta from {@link https://github.com/stampit-org/stampit|stampit} definition.
* @memberOf MetaMixin
* @static
* @returns {Meta}
* @example {@lang javascript}
* var meta = stampit().compose(MetaMixin).getMeta();
*/
getMeta() {
return this.fixed.refs._meta;
}
}
});
/**
* Used as a manager for {@link http://validatejs.org/#constraints|Constraints} object (validation). **Not** meant to be used directly.
* @constructor
* @type {ConstraintsMixin}
* @property {Object} _constraints private attribute which holds constraints object
* @example {@lang javascript}
* var MyStamp = stampit().compose(ConstraintsMixin);
*/
export const ConstraintsMixin = stampit({
methods: {
/**
* Sets constraints used for validation.
* @memberOf ConstraintsMixin
* @instance
* @param {Object} constraints plain JavaScript object
* @returns {ConstraintsMixin}
* @example {@lang javascript}
* var MyStamp = stampit().compose(ConstraintsMixin);
* var newObject = MyStamp().setConstraints({});
*/
setConstraints(constraints) {
this._constraints = constraints;
return this;
},
/**
* Gets constraints from object instance.
* @memberOf ConstraintsMixin
* @instance
* @returns {Object}
* @example {@lang javascript}
* var MyStamp = stampit().compose(ConstraintsMixinn);
* var constraints = MyStamp().getConstraints();
*/
getConstraints() {
return this._constraints;
}
},
static: {
/**
* Sets constraints in {@link https://github.com/stampit-org/stampit|stampit} definition used for validation.
* @memberOf ConstraintsMixin
* @static
* @param {Object} constraints plain JavaScript object
* @returns {stampit}
* @example {@lang javascript}
* var MyStamp = stampit().compose(ConstraintsMixin).setConstraints({});
*/
setConstraints(constraints) {
return this.refs({_constraints: constraints});
},
/**
* Gets constraints from {@link https://github.com/stampit-org/stampit|stampit} definition.
* @memberOf ConstraintsMixin
* @static
* @returns {Object}
* @example {@lang javascript}
* var constraints = stampit().compose(ConstraintsMixin).getConstraints();
*/
getConstraints() {
return this.fixed.refs._constraints;
}
}
});
/**
* Adds logging functionality.
* @constructor
* @type {Logger}
* @example {@lang javascript}
* var MyStamp = stampit().compose(Logger);
*/
export const Logger = stampit({
methods: {
/**
* Wrapper around *console.log*.
* @memberOf Logger
* @instance
*/
log(...args) {
const env = process.env.BABEL_ENV || process.env.NODE_ENV;
if (env === 'development') {
/* eslint-disable no-console */
console.log(...args);
/* eslint-enable no-console */
}
}
}
});