<commit_before>/**
 * Représente un modèle de données.
 * @param data Les données.
 * @contructor
 */
Webos.Model = function WModel(data) {
	Webos.Observable.call(this);
	
	this._data = {};
	this._unsynced = {};
	
	this.hydrate(data);
};
Webos.Model.prototype = {
	/**
	 * Définir les données internes du modèle.
	 * @param {Object} data Les données.
	 * @private
	 */
	_hydrate: function(data) {
		if (!data) {
			return;
		}
		
		for (var key in data) {
			this._data[key] = data[key];
		}
	},
	/**
	 * Définir les données du modèle.
	 * @param {Object} data Les données.
	 */
	hydrate: function(data) {
		return this._hydrate(data);
	},
	/**
	 * Récupérer une valeur associée à une clef dans les données du modèle.
	 * @param key La clef.
	 * @returns La valeur associées à la clef.
	 */
	get: function(key) {
		if (typeof this[key] == 'function') {
			return this[key]();
		}
		var methodName = 'get' + key.charAt(0).toUpperCase() + key.substr(1);
		if (typeof this[methodName] == 'function') {
			return this[methodName]();
		}
		if (typeof this._data[key] != 'undefined') {
			return this._get(key);
		}
	},
	/**
	 * Récupérer une valeur associée à une clef dans les données du modèle.
	 * @param key La clef.
	 * @returns La valeur associées à la clef.
	 * @deprecated Depuis la version 1.0 alpha 1, utilisez Model#get().
	 */
	getAttribute: function(key) {
		return this.get(key);
	},
	/**
	 * Récupérer une valeur associée à une clef dans l'objet interne de données du modèle.
	 * @param key La clef.
	 * @returns La valeur associées à la clef.
	 * @private
	 */
	_get: function(key) {
		return this._data[key];
	},
	/**
	 * Récupérer toutes les données du modèle.
	 * @returns {Object} Les données.
	 */
	data: function() {
		return this._data;
	},
	/**
	 * Définir une valeur associée à une clef dans les données du modèle.
	 * @param key La clef.
	 * @param value La nouvelle valeur.
	 * @returns {Boolean} Vrai si la modification a réussi, faux dans le cas contraire.
	 */
	set: function(key, value) {
		var methodName = 'set' + key.charAt(0).toUpperCase() + key.substr(1);
		if (this.exists(key) && this.get(key) === value) {
			return true;
		}
		if (typeof this[methodName] == 'function') {
			this._set(key, value);
			return this[methodName](value);
		}
		
		this._set(key, value);
		return true;
	},
	/**
	 * Définir une valeur associée à une clef dans l'objet interne de données du modèle.
	 * @param key La clef.
	 * @param value La nouvelle valeur.
	 * @private
	 */
	_set: function(key, value) {
		this._unsynced[key] = { value: value, state: 1 };
		return true;
	},
	/**
	 * Tester si une clef existe dans les données du modèle.
	 * @param key La clef.
	 * @returns {Boolean} Vrai si la clef existe, faux dans le cas contraire.
	 */
	exists: function(key) {
		var methodName = 'get' + key.charAt(0).toUpperCase() + key.substr(1);
		if (typeof this[methodName] == 'function') {
			return true;
		}
		if (typeof this._data[key] != 'undefined') {
			return true;
		}
		return false;
	},
	/**
	 * Retirer une donnée du modèle.
	 * @param key La clef.
	 * @returns Vrai si la modification a réussi, faux sinon.
	 */
	remove: function(key) {
		var methodName = 'remove' + key.charAt(0).toUpperCase() + key.substr(1);
		if (!this.exists(key)) {
			return true;
		}
		if (typeof this[methodName] == 'function') {
			this[methodName]();
		}
		
		this._remove(key);
		return true;
	},
	/**
	 * Retirer une donnée dans l'objet interne de données du modèle.
	 * @param key La clef.
	 * @private
	 */
	_remove: function(key) {
		this._unsynced[key] = { value: undefined, state: 1 };
	},
	/**
	 * Envoyer les modifications effectuées sur le modèle vers le serveur.
	 * @param {Webos.Callback} callback La fonction de rappel qui sera appelée une fois que les modifications auront été envoyées.
	 */
	sync: function(callback) {
		callback = Webos.Callback.toCallback(callback);
		
		this._unsynced = {};
		callback.success();
	}
};
Webos.inherit(Webos.Model, Webos.Observable); //Héritage de Webos.Observable<commit_msg>Added JSDoc to Webos.Model.<commit_after>/**
 * A model of data.
 * @param data The data.
 * @constructor
 * @augments {Webos.Observable}
 * @since 1.0alpha1
 */
Webos.Model = function WModel(data) {
	Webos.Observable.call(this);
	
	this._data = {};
	this._unsynced = {};
	
	this.hydrate(data);
};
Webos.Model.prototype = {
	/**
	 * Set this internal model's data.
	 * @param {Object} data The data.
	 * @private
	 */
	_hydrate: function(data) {
		if (!data) {
			return;
		}
		
		for (var key in data) {
			this._data[key] = data[key];
		}
	},
	/**
	 * Set this model's data.
	 * @param {Object} data The data.
	 */
	hydrate: function(data) {
		return this._hydrate(data);
	},
	/**
	 * Get a value associated with a key in the model's data.
	 * @param key The key.
	 * @returns The value associated with the key.
	 */
	get: function(key) {
		if (typeof this[key] == 'function') {
			return this[key]();
		}
		var methodName = 'get' + key.charAt(0).toUpperCase() + key.substr(1);
		if (typeof this[methodName] == 'function') {
			return this[methodName]();
		}
		if (typeof this._data[key] != 'undefined') {
			return this._get(key);
		}
	},
	/**
	 * Get a value associated with a key in the model's data.
	 * @param key The key.
	 * @returns The value associated with the key.
	 * @deprecated Since 1.0 alpha 1, use Model#get().
	 */
	getAttribute: function(key) {
		return this.get(key);
	},
	/**
	 * Get a value associated with a key in the internal model's data.
	 * @param key The key.
	 * @returns The value associated with the key.
	 * @private
	 */
	_get: function(key) {
		return this._data[key];
	},
	/**
	 * Get this model's data.
	 * @returns {Object} The data.
	 */
	data: function() {
		return this._data;
	},
	/**
	 * Set a value associated with a key in the model's data.
	 * @param key The key.
	 * @param value The new value.
	 * @returns {Boolean} True if there was no error, false otherwise.
	 */
	set: function(key, value) {
		var methodName = 'set' + key.charAt(0).toUpperCase() + key.substr(1);
		if (this.exists(key) && this.get(key) === value) {
			return true;
		}
		if (typeof this[methodName] == 'function') {
			this._set(key, value);
			return this[methodName](value);
		}
		
		this._set(key, value);
		return true;
	},
	/**
	 * Set a value associated with a key in the internal model's data.
	 * @param key The key.
	 * @param value The new value.
	 * @private
	 */
	_set: function(key, value) {
		this._unsynced[key] = { value: value, state: 1 };
		return true;
	},
	/**
	 * Check if a key exists in the model's data.
	 * @param key The key.
	 * @returns {Boolean} True if the key exists, false otherwise.
	 */
	exists: function(key) {
		var methodName = 'get' + key.charAt(0).toUpperCase() + key.substr(1);
		if (typeof this[methodName] == 'function') {
			return true;
		}
		if (typeof this._data[key] != 'undefined') {
			return true;
		}
		return false;
	},
	/**
	 * Remove a value in the model's data.
	 * @param key The key associated to the value.
	 * @returns {Boolean} True if there was no error, false otherwise.
	 */
	remove: function(key) {
		var methodName = 'remove' + key.charAt(0).toUpperCase() + key.substr(1);
		if (!this.exists(key)) {
			return true;
		}
		if (typeof this[methodName] == 'function') {
			this[methodName]();
		}
		
		this._remove(key);
		return true;
	},
	/**
	 * Remove a value in the internal model's data.
	 * @param key The key associated to the value.
	 * @private
	 */
	_remove: function(key) {
		this._unsynced[key] = { value: undefined, state: 1 };
	},
	/**
	 * Commit modifications on the object.
	 * @param {Webos.Callback} callback The callback.
	 */
	sync: function(callback) {
		callback = Webos.Callback.toCallback(callback);
		
		this._unsynced = {};
		callback.success();
	}
};
Webos.inherit(Webos.Model, Webos.Observable);

{'fraction_non_alphanumeric': 0.1491642210029348, 'fraction_numerical': 0.0037003955595253284, 'mean_word_length': 3.1230931088900578, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '1408903', 'n_tokens_mistral': 2986, 'n_tokens_neox': 2736, 'n_words': 821}