Skip to content

Instantly share code, notes, and snippets.

@tshaddix
Last active December 23, 2015 17:09
Show Gist options
  • Save tshaddix/6666378 to your computer and use it in GitHub Desktop.
Save tshaddix/6666378 to your computer and use it in GitHub Desktop.
Delta Service
/*
* Checks two Date objects based on human date (mm/dd/yyyy) two test equality
*
* @param {Date} date1
* @param {Date} date2
* @return {Boolean}
*/
function sameHumanDate(date1, date2){
if (date1.getDate() === date2.getDate() &&
date1.getFullYear() === date2.getFullYear() &&
date1.getMonth() === date2.getMonth()
){
return true;
}
else {
return false;
}
}
/*
* Gets value of field in object
*
* @param {Object} obj
* @param {String} field - ex: 'effective' or 'rate.effective'
*
* @return {Object} value of field
*/
function getValue(obj, field){
var properties = field.split('.');
var internal = obj;
for(var p = 0; p < properties.length; p++){
internal = internal[properties[p]];
}
return internal;
}
/*
* Checks if delta array is valid
*
* @param {Array} deltas
* @param {String} field
*
* @return {Boolean}
*/
function valid(deltas, field){
if (deltas.length > 1) {
for (var i=0; i < deltas.length-1; i++) {
for (var j = i+1; j < deltas.length; j++) {
var i_date = getValue(deltas[i], field),
j_date = getValue(deltas[j], field);
// ensure no deltas have same date (mm/dd/yyyy)
if (dateService.sameHumanDate(i_date, j_date)) return false;
}
}
}
return true;
}
/*
* Find effective delta for a given date
*
* @param {Date} date
* @param {Array} deltas
* @param {String} field
*
* @return {Object}
*/
function find(date, deltas, field){
if(deltas.length === 0) return null;
// sort deltas by ascending date
deltas.sort(function(a, b){
return getValue(a, field).getTime() - getValue(b, field).getTime();
});
// special case where no effective delta
if(getValue(deltas[0], field) > date) return null;
// find most effective delta
for(var r = 1; r < deltas.length; r++){
var _deltaDate = getValue(deltas[r], field);
if(dateService.sameHumanDate(_deltaDate, date)) return deltas[r];
if(_deltaDate > date) return deltas[r-1];
}
// if no deltas end effective period, return last
return deltas[deltas.length - 1];
}
exports.valid = valid;
exports.find = find;
exports.sameHumanDate = sameHumanDate;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment