-
Notifications
You must be signed in to change notification settings - Fork 140
/
PatternUtil.kt
48 lines (33 loc) · 2.24 KB
/
PatternUtil.kt
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
package de.zalando.zally.util
/**
* Utility library for matching common patterns
*/
object PatternUtil {
private val CAMEL_CASE_PATTERN = "^[a-z]+(?:[A-Z][a-z]+)*$".toRegex()
private val PASCAL_CASE_PATTERN = "^[A-Z][a-z]+(?:[A-Z][a-z]+)*$".toRegex()
private val HYPHENATED_CAMEL_CASE_PATTERN = "^[a-z]+(?:-[A-Z][a-z]+)*$".toRegex()
private val HYPHENATED_PASCAL_CASE_PATTERN = "^[A-Z][a-z0-9]*(?:-[A-Z][a-z0-9]+)*$".toRegex()
private val SNAKE_CASE_PATTERN = "^[a-z0-9]+(?:_[a-z0-9]+)*$".toRegex()
private val KEBAB_CASE_PATTERN = "^[a-z]+(?:-[a-z]+)*$".toRegex()
private val HYPHENATED_PATTERN = "^[A-Za-z0-9.]+(-[A-Za-z0-9.]+)*$".toRegex()
private val VERSION_IN_URL_PATTERN = "(.*)/v[0-9]+(.*)".toRegex()
private val PATH_VARIABLE_PATTERN = "\\{.+}$".toRegex()
private val GENERIC_VERSION_PATTERN = "^\\d+\\.\\d+\\.\\d+$".toRegex()
private val APPLICATION_PROBLEM_JSON_PATTERN = "^application/(problem\\+)?json$".toRegex()
private val CUSTOM_WITH_VERSIONING_PATTERN = "^\\w+/[-+.\\w]+;v(ersion)?=\\d+$".toRegex()
fun hasTrailingSlash(input: String): Boolean = input.trim { it <= ' ' }.endsWith("/")
fun isPathVariable(input: String): Boolean = input.matches(PATH_VARIABLE_PATTERN)
fun isCamelCase(input: String): Boolean = input.matches(CAMEL_CASE_PATTERN)
fun isPascalCase(input: String): Boolean = input.matches(PASCAL_CASE_PATTERN)
fun isHyphenatedCamelCase(input: String): Boolean = input.matches(HYPHENATED_CAMEL_CASE_PATTERN)
fun isHyphenatedPascalCase(input: String): Boolean = input.matches(HYPHENATED_PASCAL_CASE_PATTERN)
fun isSnakeCase(input: String): Boolean = input.matches(SNAKE_CASE_PATTERN)
fun isKebabCase(input: String): Boolean = input.matches(KEBAB_CASE_PATTERN)
fun isHyphenated(input: String): Boolean = input.matches(HYPHENATED_PATTERN)
fun hasVersionInUrl(input: String): Boolean = input.matches(VERSION_IN_URL_PATTERN)
fun isVersion(input: String): Boolean = input.matches(GENERIC_VERSION_PATTERN)
fun isApplicationJsonOrProblemJson(mediaType: String): Boolean =
mediaType.matches(APPLICATION_PROBLEM_JSON_PATTERN)
fun isCustomMediaTypeWithVersioning(mediaType: String): Boolean =
mediaType.matches(CUSTOM_WITH_VERSIONING_PATTERN)
}