code: function set(data, point, silent) {
  	if (!data || typeof(data) !== 'object') {
  		return logger('DB_SAVE_INVALID_DATA');
  	}
  
  	if (point && typeof(point) === 'string') {
  		const tree = point.split(goblin.config.pointerSymbol);
  		let parent = goblin.db;
  
  		for (let i = 0; i < tree.length; i++) {
  			if (i !== tree.length - 1) {
  				if (typeof parent[tree[i]] === 'undefined') {
  					parent[tree[i]] = {};
  				}
  
  				parent = parent[tree[i]];
  			} else {
  				if (!silent) {
  					goblin.goblinDataEmitter.emit('change', {
  						type: 'set',
  						value: data,
  						oldValue: goblin.db[point],
  						key: point
  					});
  				}
  
  				parent[tree[i]] = data;
  			}
  		}
  	} else {
  		if (Array.isArray(data)) {
  			return logger('DB_SAVE_ARRAY');
  		}
  
  		const oldValue = goblin.db;
  		goblin.db = data;
  		!silent && goblin.goblinDataEmitter.emit('change', {
  			type: 'set',
  			value: goblin.db,
  			oldValue: oldValue
  		});
  	}
  }
docs: Set data to a point in the database nested tree. If you don't set a point where to
  store the data then it'll be stored in higher level, in that case the data can not
  be an array. The first element of the DB has to be always an object.
  
  @param {object | array} data The data to store in the database.
  @param {string} point The place to store the data.
  @param {bool} silent Internal use. When this is true this method doesn't trigger
  events.
  @returns {void}