-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathnestedRulesSample-fluent.ts
118 lines (107 loc) · 3.92 KB
/
nestedRulesSample-fluent.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
import {RuleBuilder} from '../rules/RuleBuilder';
import {validatorBuilder} from '../ValidatorBuilder';
let data = {
platform: '', // can be MOBILE or DESKTOP
os: '', // if platform is MOBILE, can be ANDROID, iOS or WINDOWS
// if platform is DESKTOP, can be WINDOWS or LINUX
programming_lang: '', // if os is ANDROID, can be Java or Kotlin
// if os is iOS it can be SWIFT or OBJECTIVE-C
// if platform is MOBILE and os is WINDOWS it can be C#
// if platform is DESKTOP and os is LINUX, it can be Java or C/C++
// if platform is DESKTOP and os is WIDNOWS, it can be Java, C/C++ or C#
};
const validator = validatorBuilder()
.newRule()
.withField('platform')
.validate(RuleBuilder.isIn.withValues('MOBILE', 'DESKTOP').build())
.validate(RuleBuilder.required().build())
.newRule()
.withFieldValueConstraint('platform', 'mobile')
.withField('os')
.validate(RuleBuilder.isIn.withValues('ANDROID', 'iOS', 'WINDOWS').build())
.validate(RuleBuilder.required().build())
.withField('programming_lang')
.validate(
RuleBuilder.composite
.any()
.withSubRule(
RuleBuilder.composite
.all()
.withSubRule(
RuleBuilder.exactValue.withPathAndValue('os', 'ANDROID').build()
)
.withSubRule(RuleBuilder.isIn.withValues('JAVA', 'KOTLIN').build())
.build()
)
.withSubRule(
RuleBuilder.composite
.all()
.withSubRule(
RuleBuilder.exactValue.withPathAndValue('os', 'iOS').build()
)
.withSubRule(
RuleBuilder.isIn.withValues('SWIFT', 'OBJECTIVE-C').build()
)
.build()
)
.withSubRule(
RuleBuilder.composite
.all()
.withSubRule(
RuleBuilder.exactValue.withPathAndValue('os', 'WINDOWS').build()
)
.withSubRule(RuleBuilder.isIn.withValues('C#').build())
.build()
)
.build()
)
.newRule()
.withFieldValueConstraint('platform', 'DESKTOP')
.withField('os')
.validate(RuleBuilder.isIn.withValues('WINDOWS', 'LINUX').build())
.withField('programming_lang')
.validate(
RuleBuilder.composite
.any()
.withSubRule(
RuleBuilder.composite
.all()
.withSubRule(
RuleBuilder.exactValue.withPathAndValue('os', 'WINDOWS').build()
)
.withSubRule(
RuleBuilder.isIn.withValues('JAVA', 'C/C++', 'C#').build()
)
.build()
)
.withSubRule(
RuleBuilder.composite
.all()
.withSubRule(
RuleBuilder.exactValue.withPathAndValue('os', 'LINUX').build()
)
.withSubRule(RuleBuilder.isIn.withValues('JAVA', 'C/C++').build())
.build()
)
.build()
)
.build();
console.log('========================================');
console.log('DATA: ', data);
console.log('VALIDATION: ', validator.validate(data));
data = {...data, platform: 'DESKTOP', os: 'LINUX', programming_lang: 'Basic'}; // INVALID: programming_lang must be Java or C/C++
console.log('========================================');
console.log('DATA: ', data);
console.log('VALIDATION: ', validator.validate(data));
data = {...data, platform: 'DESKTOP', os: 'MACOS', programming_lang: 'Basic'}; // INVALID: os must be WINDOWS or LINUX
console.log('========================================');
console.log('DATA: ', data);
console.log('VALIDATION: ', validator.validate(data));
data = {...data, platform: 'MOBILE', os: 'iOS', programming_lang: 'Java'}; // INVALID programming_lang must be SWIFT or OBJECTIVE-C
console.log('========================================');
console.log('DATA: ', data);
console.log('VALIDATION: ', validator.validate(data));
data = {...data, platform: 'MOBILE', os: 'ANDROID', programming_lang: 'Java'}; // VALID
console.log('========================================');
console.log('DATA: ', data);
console.log('VALIDATION: ', validator.validate(data));