Last active
November 3, 2017 08:11
-
-
Save jeson114/8d0b1c07272c3502ee264576ede95960 to your computer and use it in GitHub Desktop.
Recommendation for an object evaluator against a set of rules
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//rules: array of objects | |
////schema : [{fn:somefucnctionDefinition] applies to evaluate() | |
//schema : [{fn:somefucnctionDefinition,key:bool}] applies only to every and some | |
//evaluate every - checks for all rules to pass | |
//evaluate some - checks for atleast one rule to pass | |
//rule must be a function whose execution results in a truthy or falsy value | |
//key is set on target as the result of a the evaluate function . the key to be set needs to be passed in rule.key | |
(function() { | |
'use strict'; | |
angular | |
.module('OnCorps.components') | |
.factory('ObjectAnalysisService', ObjectAnalysisService); | |
ObjectAnalysisService.$inject = []; | |
function ObjectAnalysisService() { | |
var api = { | |
evaluateEvery: evaluateEvery, | |
evaluateSome: evaluateSome | |
}; | |
return api; | |
function evaluate(rules, target) { | |
var objectStatus = {}; | |
objectStatus.passed = 0; | |
objectStatus.failed = 0; | |
for (var i = 0; i < rules.length; i++) { | |
if (rules[i].fn(target) === true) { | |
objectStatus.passed++; | |
} else { | |
objectStatus.failed++; | |
} | |
} | |
return objectStatus; | |
} | |
function evaluateEvery(rules, target) { | |
for (var i = 0; i < rules.length; i++) { | |
if (rules[i].fn(target) === true) { | |
target[rules[i].key] = rules[i].fn(target); | |
continue; | |
} else { | |
target[rules[i].key] = rules[i].fn(target); | |
break; | |
} | |
} | |
} | |
function evaluateSome(rules, target) { | |
for (var i = 0; i < rules.length; i++) { | |
if (rules[i].fn(target) === true) { | |
target[rules[i].key] = rules[i].fn(target); | |
break; | |
} else { | |
target[rules[i].key] = rules[i].fn(target); | |
continue; | |
} | |
} | |
} | |
} | |
})(); |
Suggest rename to ObjectAnalysisService
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Another alternative: