-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathmodel-ruleset.yaml
137 lines (129 loc) · 3.53 KB
/
model-ruleset.yaml
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
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
#
# Copyright 2019-2022 Groupe BPCE
#
# Licensed under the Apache License, Version 2.0 (the License);
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an AS IS BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
rules:
schema-name-uppercamelcase:
recommended: true
description: Definitionname must be in UpperCamelCase
message: '{{description}} ({{path}})'
given:
- $.definitions
- $.components.schemas
severity: error
tags:
- model
then:
field: "@key"
# function: casing not working :-(
#functionOption:
# type: pascal
function: pattern
functionOptions:
match: "^[A-Z][a-z0-9]+([A-Z][a-z0-9]*)*$"
schema-name-no-number:
recommended: true
description: Definitionname should not contain number
message: '{{description}} ({{path}})'
given:
- $.definitions
- $.components.schemas
severity: warn
tags:
- model
then:
field: "@key"
function: pattern
functionOptions:
notMatch: "/[0-9]+/i"
schema-name-no-technical-prefix-suffix:
recommended: true
description: Definitionname must not contain technical suffix or prefix
message: '{{description}} ({{path}})'
given:
- $.definitions
- $.components.schemas
severity: error
tags:
- model
then:
- field: "@key"
function: pattern
functionOptions:
notMatch: "/^.*dto(list|s)?$/i"
- field: "@key"
function: pattern
functionOptions:
notMatch: "/^dtos?.*$/i"
property-name-lowercamelcase:
recommended: true
description: Property name must be in lowerCamelCase or be _links
message: '{{description}} ({{path}})'
given: $..properties
severity: error
tags:
- property
then:
- field: "@key"
function: pattern
functionOptions:
match: "^(_links|[a-z0-9]+([A-Z][a-z0-9]*)*)$"
property-name-no-number:
recommended: true
description: Property name should not contain numbers
message: '{{description}} ({{path}})'
given: $..properties
severity: warn
resolved: false
then:
- field: "@key"
function: pattern
functionOptions:
notMatch: "/[0-9]+/i"
tags:
- property
property-name-no-technical-prefix-suffix:
recommended: true
description: Property name must not use technical prefix or suffix
message: '{{description}} ({{path}})'
given: $..properties
severity: error
then:
- field: "@key"
function: pattern
functionOptions:
notMatch: "/^.*dtos?$/i"
- field: "@key"
function: pattern
functionOptions:
notMatch: "/^dtos?.*$/i"
tags:
- property
model-empty-required:
recommended: true
description: "A schema (definition) without any required properties is suspicious (but it can be normal)"
message: '{{description}} ({{path}})'
severity: info
tags:
- model
given:
- $.definitions.*
- $.components.schemas.*
then:
- field: required
function: truthy
- field: required
function: length
functionOptions:
min: 1