UNPKG

@gooddata/gooddata-js

Version:
29 lines (20 loc) 784 B
// (C) 2007-2018 GoodData Corporation import invariant from "invariant"; import find from "lodash/find"; import every from "lodash/every"; export type RulePredicate = (measureDefinition: any, mdObj: any) => boolean; export type RuleCallback = (measure: any, mdObj: any, measureIndex: number, attributesMap: any) => any; export class Rules { private rules: any[]; constructor() { this.rules = []; } public addRule(tests: RulePredicate[], callback: RuleCallback) { this.rules.push([tests, callback]); } public match(subject: any, params: any) { const [, callback] = find(this.rules, ([tests]) => every(tests, test => test(subject, params))); invariant(callback, "Callback not found :-("); return callback; } }