I create conditions dynamically. I have three type of conditions string,number,date.
I have a class like this.
export class Conditions {
private async compare(type, conditions) {
switch (type) {
case 'number':
return this.numberCompare(conditions);
case 'string':
return this.stringCompare(conditions);
case 'date':
return this.dateCompare(conditions);
}
}
private async numberCompare(conditions) {
let value1 = conditions['value1']
let value2 = conditions['value2']
let operator = conditions['operator']
switch (operator) {
case 'larger':
return value1 > value2;
case 'smaller':
return value1 < value2;
case 'larger or equal':
return value1 >= value2;
case 'smaller or equal':
return value1 <= value2;
case 'equal':
return value1 === value2;
case 'not equal':
return value1 !== value2;
case 'is number':
return await this.isNumeric(value1);
}
}
private async stringCompare(conditions) {
let value1 = conditions['value1']
let value2 = conditions['value2']
let operator = conditions['operator']
switch (operator) {
case 'is empty':
return typeof value1 !== undefined;
case 'equal':
return value1 === value2;
case 'not equal':
return value1 !== value2;
case 'is string':
return await this.isString(value1);
}
}
private async dateCompare(conditions) {
let value1 = conditions['value1']
let value2 = conditions['value2']
let operator = conditions['operator']
switch (operator) {
case 'is empty':
return typeof value1 !== undefined;
case 'equal':
return value1 === value2;
case 'not equal':
return value1 !== value2;
case 'is date':
return await this.isDate(value1);
}
}
private async isDate(value) {
}
private async isNumeric(value) {
return !isNaN(parseFloat(value)) && isFinite(value);
}
private async isString(value) {
return typeof value === 'string' || value instanceof String
}
}
Is there any best way to handle it? for example, polymorphism is better than this class? If yes, how should I handle it?