@@ -42,7 +42,7 @@ object Conditions {
42
42
EQUALS -> attributeValue.value == conditionValue.value
43
43
NOT_EQUALS -> attributeValue.value != conditionValue.value
44
44
CONTAINS -> attributeValue.value?.contains(conditionValue.value.orEmpty()) ? : false
45
- NOT_CONTAINS -> attributeValue.value?.contains(conditionValue.value.orEmpty())?.not () ? : false
45
+ NOT_CONTAINS -> attributeValue.value?.contains(conditionValue.value.orEmpty())?.not () ? : false
46
46
STARTS_WITH -> attributeValue.value?.startsWith(conditionValue.value.orEmpty()) ? : false
47
47
ENDS_WITH -> attributeValue.value?.endsWith(conditionValue.value.orEmpty()) ? : false
48
48
SEMVER_EQUALS -> compareVersions(
@@ -119,6 +119,65 @@ object Conditions {
119
119
}
120
120
}
121
121
122
+ attributeValue is AttributeValue .IntValue && conditionValue is ConditionValue .ArrayValue -> {
123
+ when (operator ) {
124
+ IN_ARRAY -> attributeValue.value.toString() in conditionValue.values
125
+ NOT_IN_ARRAY -> (attributeValue.value.toString() !in conditionValue.values)
126
+ else -> false
127
+ }
128
+ }
129
+
130
+ attributeValue is AttributeValue .DoubleValue && conditionValue is ConditionValue .StringValue -> {
131
+ when (operator ) {
132
+ EQUALS -> attributeValue.value.toString() == conditionValue.value
133
+ NOT_EQUALS -> attributeValue.value.toString() != conditionValue.value
134
+
135
+ SEMVER_EQUALS -> compareVersions(
136
+ attributeValue.value.toString(),
137
+ conditionValue.value.orEmpty(),
138
+ ) == 0
139
+
140
+ SEMVER_NOT_EQUALS -> compareVersions(
141
+ attributeValue.value.toString(),
142
+ conditionValue.value.orEmpty(),
143
+ ) != 0
144
+
145
+ SEMVER_GREATER_THAN -> compareVersions(
146
+ attributeValue.value.toString(),
147
+ conditionValue.value.orEmpty()
148
+ ) == 1
149
+
150
+ SEMVER_GREATER_THAN_OR_EQUALS -> compareVersions(
151
+ attributeValue.value.toString(),
152
+ conditionValue.value.orEmpty()
153
+ ) >= 0
154
+
155
+ SEMVER_LESS_THAN -> compareVersions(
156
+ attributeValue.value.toString(),
157
+ conditionValue.value.orEmpty()
158
+ ) == - 1
159
+
160
+ SEMVER_LESS_THAN_OR_EQUALS -> compareVersions(
161
+ attributeValue.value.toString(),
162
+ conditionValue.value.orEmpty()
163
+ ) <= 0
164
+
165
+ else -> false
166
+ }
167
+ }
168
+
169
+ attributeValue is AttributeValue .StringValue && conditionValue is ConditionValue .IntValue -> {
170
+ when (operator ) {
171
+ EQUALS -> attributeValue.value == conditionValue.value.toString()
172
+ NOT_EQUALS -> attributeValue.value != conditionValue.value.toString()
173
+ CONTAINS -> attributeValue.value?.contains(conditionValue.value.toString()) ? : false
174
+ NOT_CONTAINS -> attributeValue.value?.contains(conditionValue.value.toString())?.not () ? : false
175
+ STARTS_WITH -> attributeValue.value?.startsWith(conditionValue.value.toString()) ? : false
176
+ ENDS_WITH -> attributeValue.value?.endsWith(conditionValue.value.toString()) ? : false
177
+ else -> false
178
+ }
179
+ }
180
+
122
181
attributeValue is AttributeValue .DateValue && conditionValue is ConditionValue .DateTimeValue -> {
123
182
when (operator ) {
124
183
EQUALS -> attributeValue.value == conditionValue.value
@@ -143,9 +202,31 @@ object Conditions {
143
202
144
203
private fun compareVersions (actual : String , condition : String ): Int {
145
204
return try {
146
- SemVer .parse(actual).compareTo(SemVer .parse(condition))
205
+ SemVer .parse(normalizeSemver( actual)) .compareTo(SemVer .parse(normalizeSemver( condition) ))
147
206
} catch (e: Exception ) {
148
207
0
149
208
}
150
209
}
210
+
211
+ private fun normalizeSemver (version : String ): String {
212
+ val parts = version.split(" -" , " +" )
213
+ val mainParts = parts[0 ].split(" ." ).map { it.toInt().toString() }
214
+ var normalizedVersion = mainParts.joinToString(" ." )
215
+
216
+ if (version.contains(" -" )) {
217
+ val preRelease = parts[1 ].split(" ." ).joinToString(" ." ) {
218
+ if (it.all { char -> char.isDigit() }) it.toInt().toString()
219
+ else it
220
+ }
221
+ normalizedVersion + = " -$preRelease "
222
+ }
223
+
224
+ if (version.contains(" +" )) {
225
+ val buildMetadata = version.split(" +" )[1 ]
226
+ normalizedVersion + = " +$buildMetadata "
227
+ }
228
+
229
+ return normalizedVersion
230
+ }
231
+
151
232
}
0 commit comments