define('Equals/impl',[
'./namespace','./Functions',
'InternalObject/NamespacedKVS','InternalObject/PrototypeWalker'
],function (Equals,Functions,
NamespacedKVS,PrototypeWalker) {
NamespacedKVS.mixinNamespace('Equals');
var store = NamespacedKVS.storeFnFactory('Equals');
/**
* @function set
* @memberOf BeautifulProperties.Equals
* @see BeautifulProperties.Equals.equals
*
* @param {object} object
* @param {string} key
* @param {function(*,*):boolean} equalsFn equals function for BeautifulProperties.Equals.equals.
* @description It set the equals function on the property.
*/
Equals.set = function set(object,key,equalsFn){
equalsFn = equalsFn || Functions.StrictEqual;
store(object,key,equalsFn);
};
var walkAndRetrieve = PrototypeWalker.retrieve.bind(null,'Equals');
/**
* @function equals
* @memberOf BeautifulProperties.Equals
*
* @param {object} object
* @param {string} key
* @param {*} value
* @param {*} otherValue
* @returns {boolean}
* @description If it returns true,value is equal to otherValue in the property.
*/
Equals.equals = function equals(object,key,value,otherValue){
var equalsFn = walkAndRetrieve(object,key);
if (!equalsFn) {
return value === otherValue;
}
if (equalsFn === Functions.StrictEqual){
return value === otherValue;
}
return equalsFn.call(object,value,otherValue);
};
});