import defaults from 'lodash' import omitBy from 'lodash' import isNil from 'lodash' export default class AbstractModel { /** * The abstract constructor takes an object and merges its data with the default data of this model. * @param data */ constructor(data) { // Put all data in our model while overriding those with a value of null or undefined with their defaults defaults(this, omitBy(data, isNil), this.defaults()) } /** * Default attributes that define the "empty" state. * @return {{}} */ defaults() { return {} } }