From c01752b5d9c186836dd72d2d1d2854fc181bf403 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oliver=20R=C3=BCmpelein?= Date: Sun, 19 Apr 2020 13:18:17 +0200 Subject: [PATCH] Cleanup after getting rid of Mulitplatform. --- .../kotlin/de/pheerai/rcdbquery/Sample.kt | 2 +- .../pheerai/rcdbquery/dataMappings/Order.kt | 10 ++ .../rcdbquery/dataMappings/RcdbParamOption.kt | 1 + .../dataMappings/RcdbParamOptionBuilder.kt | 38 ++++++ .../rcdbquery/dataMappings/RcdbQueryParams.kt | 2 - .../rcdbquery/dataMappings/SearchTerm.kt | 16 +++ .../rcdbquery/dataMappings/SearchType.kt | 15 ++ .../pheerai/rcdbquery/dataMappings/Vendor.kt | 13 +- .../rcdbquery/dataMappings/unknownParams.kt | 20 +++ .../de/pheerai/rcdbquery/dsl/rcdbQueryDsl.kt | 129 +++--------------- .../de/pheerai/rcdbquery/SampleTests.kt | 11 -- .../de/pheerai/rcdbquery/SampleTestsJVM.kt | 11 -- .../pheerai/rcdbquery/dsl/RcdbQueryDslTest.kt | 5 +- 13 files changed, 131 insertions(+), 142 deletions(-) create mode 100644 src/main/kotlin/de/pheerai/rcdbquery/dataMappings/RcdbParamOptionBuilder.kt delete mode 100644 src/main/kotlin/de/pheerai/rcdbquery/dataMappings/RcdbQueryParams.kt create mode 100644 src/main/kotlin/de/pheerai/rcdbquery/dataMappings/unknownParams.kt delete mode 100644 src/test/kotlin/de/pheerai/rcdbquery/SampleTests.kt delete mode 100644 src/test/kotlin/de/pheerai/rcdbquery/SampleTestsJVM.kt diff --git a/src/main/kotlin/de/pheerai/rcdbquery/Sample.kt b/src/main/kotlin/de/pheerai/rcdbquery/Sample.kt index 6407f8e..e8040a5 100644 --- a/src/main/kotlin/de/pheerai/rcdbquery/Sample.kt +++ b/src/main/kotlin/de/pheerai/rcdbquery/Sample.kt @@ -8,7 +8,7 @@ fun main() { } fun generateQueryUrl() = rcdbQuery { - searchFor(SearchType.COASTER) + searchType(SearchType.COASTER) searchTerm("Dragon") vendors { vekoma() diff --git a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/Order.kt b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/Order.kt index 09653ee..f2cefdc 100644 --- a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/Order.kt +++ b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/Order.kt @@ -1,5 +1,8 @@ package de.pheerai.rcdbquery.dataMappings +import de.pheerai.rcdbquery.dsl.RcdbQueryParamsBuilder + +@Suppress("unused") enum class Order( override val prettyName: String, override val fullName: String, @@ -52,3 +55,10 @@ enum class Order( const val staticParamName = "order" } } + +fun RcdbQueryParamsBuilder.sortBy(body: OrderBuilder.() -> OrderBuilder): RcdbQueryParamsBuilder { + val builder = OrderBuilder() + builder.body() + this[Order.staticParamName] = builder.build() + return this +} diff --git a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/RcdbParamOption.kt b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/RcdbParamOption.kt index b1a8955..f3a3ba1 100644 --- a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/RcdbParamOption.kt +++ b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/RcdbParamOption.kt @@ -5,3 +5,4 @@ interface RcdbParamOption { val fullName: String val paramValue: T } + diff --git a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/RcdbParamOptionBuilder.kt b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/RcdbParamOptionBuilder.kt new file mode 100644 index 0000000..ddd5c24 --- /dev/null +++ b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/RcdbParamOptionBuilder.kt @@ -0,0 +1,38 @@ +package de.pheerai.rcdbquery.dataMappings + +// TODO: Find way to only have one generic parameter +sealed class RcdbParamOptionBuilder> { + private val paramList: MutableList = mutableListOf() + + open fun add(param: T): RcdbParamOptionBuilder { + paramList.add(param) + return this + } + + fun build() = paramList.toList() +} + +class VendorBuilder : RcdbParamOptionBuilder() { + override fun add(param: Vendor): VendorBuilder { + super.add(param) + return this + } + + fun of(vendor: Vendor) = this.add(vendor) + fun vekoma() = this.add(Vendor.VEKOMA) + fun intamin() = this.add(Vendor.INTAMIN) + fun mack() = this.add(Vendor.MACK) + fun bandm() = this.add(Vendor.B_AND_M) + fun gerstlauer() = this.add(Vendor.GERSTLAUER) +} + +class OrderBuilder : RcdbParamOptionBuilder() { + override fun add(param: Order): OrderBuilder { + super.add(param) + return this + } + + fun of(order: Order) = this.add(order) + fun manufacturer() = this.add(Order.MANUFACTURER) + fun inversion() = this.add(Order.INVERSIONS) +} diff --git a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/RcdbQueryParams.kt b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/RcdbQueryParams.kt deleted file mode 100644 index cf0267e..0000000 --- a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/RcdbQueryParams.kt +++ /dev/null @@ -1,2 +0,0 @@ -package de.pheerai.rcdbquery.dataMappings - diff --git a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/SearchTerm.kt b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/SearchTerm.kt index 5e74c13..8dbb29b 100644 --- a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/SearchTerm.kt +++ b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/SearchTerm.kt @@ -1,5 +1,7 @@ package de.pheerai.rcdbquery.dataMappings +import de.pheerai.rcdbquery.dsl.RcdbQueryParamsBuilder + class SearchTerm(override val paramValue: String): RcdbParamOption { override val prettyName = "Search Term" override val fullName = "Search for elements whose name contain this term" @@ -7,3 +9,17 @@ class SearchTerm(override val paramValue: String): RcdbParamOption { const val staticParamName = "nc" } } + +fun RcdbQueryParamsBuilder.searchTerm(term: String) { + if (SearchTerm.staticParamName !in this.keys()) { + this[SearchTerm.staticParamName] = listOf( + SearchTerm(term) + ) + } else { + error( + """Only one search term must ever be set + | Old term: ${this[SearchTerm.staticParamName]!![0].paramValue} + | New term: $term""".trimMargin() + ) + } +} diff --git a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/SearchType.kt b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/SearchType.kt index 49bd350..a15c4fe 100644 --- a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/SearchType.kt +++ b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/SearchType.kt @@ -1,5 +1,8 @@ package de.pheerai.rcdbquery.dataMappings +import de.pheerai.rcdbquery.dsl.RcdbQueryParamsBuilder + +@Suppress("unused") enum class SearchType( override val prettyName: String, override val fullName: String, @@ -15,3 +18,15 @@ enum class SearchType( const val staticParamName = "ot" } } + +fun RcdbQueryParamsBuilder.searchType(searchType: SearchType) { + if (SearchType.staticParamName !in this.keys()) { + this[SearchType.staticParamName] = listOf(searchType) + } else { + error( + """Only one search type must ever be set + | Old type: ${this[SearchType.staticParamName]!![0].prettyName} + | New type: ${searchType.prettyName}""".trimMargin() + ) + } +} diff --git a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/Vendor.kt b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/Vendor.kt index 729442a..0d7fd27 100644 --- a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/Vendor.kt +++ b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/Vendor.kt @@ -1,5 +1,8 @@ package de.pheerai.rcdbquery.dataMappings +import de.pheerai.rcdbquery.dsl.RcdbQueryParamsBuilder + +@Suppress("unused") enum class Vendor( override val prettyName: String, override val fullName: String, @@ -223,9 +226,6 @@ enum class Vendor( YEISK_PLANT_ATTRACTION("Yeisk Plant Attraction", 18040), HEBEI_H_AND_S_AMUSEMENT_EQUIPMENT("Hebei H&S Amusement Equipment Co, LTD.", 18205), GOLDEN_DRAGON_AMUSEMENT("Golden Dragon Amusement Group", 18224), - - - INTAMIN("Intamin", "Intamin Amusement Rides", 6837), VEKOMA("Vekoma", 6836), MACK("Mack Rides", "Mack Rides GmbH & Co KG", 6856), @@ -253,3 +253,10 @@ enum class Vendor( } } } + +fun RcdbQueryParamsBuilder.vendors(body: VendorBuilder.() -> VendorBuilder): RcdbQueryParamsBuilder { + val builder = VendorBuilder() + builder.body() + this[Vendor.staticParamName] = builder.build() + return this +} diff --git a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/unknownParams.kt b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/unknownParams.kt new file mode 100644 index 0000000..222a68d --- /dev/null +++ b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/unknownParams.kt @@ -0,0 +1,20 @@ +package de.pheerai.rcdbquery.dataMappings + +import de.pheerai.rcdbquery.dsl.RcdbQueryParamsBuilder + +//region Unknown fields +@Suppress("unused") +@Deprecated( + "The parameter for extra columns has not yet been discovered (if it even exists). Use multiple values in the `sortBy` param instead (first values take sorting precedence)", + ReplaceWith("sortBy"), DeprecationLevel.ERROR +) +fun RcdbQueryParamsBuilder.extraColumns(orders: List): Nothing = + error("The parameter for extra columns has not yet been discovered (if it even exists). Use multiple values in the `sortBy` param instead (first values take sorting precedence)") + +@Suppress("unused") +@Deprecated( + "The parameter for extra columns has not yet been discovered (if it even exists). Use multiple values in the `sortBy` param instead (first values take sorting precedence)", + ReplaceWith("sortBy"), DeprecationLevel.ERROR +) +fun RcdbQueryParamsBuilder.extraColumns(vararg orders: Order): Nothing = + error("The parameter for extra columns has not yet been discovered (if it even exists). Use multiple values in the `sortBy` param instead (first values take sorting precedence)") diff --git a/src/main/kotlin/de/pheerai/rcdbquery/dsl/rcdbQueryDsl.kt b/src/main/kotlin/de/pheerai/rcdbquery/dsl/rcdbQueryDsl.kt index 6c6fede..1de3548 100644 --- a/src/main/kotlin/de/pheerai/rcdbquery/dsl/rcdbQueryDsl.kt +++ b/src/main/kotlin/de/pheerai/rcdbquery/dsl/rcdbQueryDsl.kt @@ -1,19 +1,25 @@ package de.pheerai.rcdbquery.dsl -import de.pheerai.rcdbquery.dataMappings.* +import de.pheerai.rcdbquery.dataMappings.RcdbParamOption +import de.pheerai.rcdbquery.dataMappings.SearchType -inline class RcdbQueryParams(val params: Map>) +class RcdbQueryParams(val params: Map>) class RcdbQueryParamsBuilder { // TODO: Make way for single-valued params as well private val params: MutableMap>> = mutableMapOf() - // TODO: Validate that search type is set - fun build() = RcdbQueryParams( - params - .filter { it.value.isNotEmpty() } - .mapValues { e -> e.value.map { o -> o.paramValue.toString() } } - ) + /** + * Creates the Query Params from this builder. + * If no Search type has been set, this will default to "Coaster" + */ + fun build() = params.apply { + putIfAbsent(SearchType.staticParamName, listOf(SearchType.COASTER)) + } + .filter { it.value.isNotEmpty() } + .mapValues { e -> e.value.map { o -> o.paramValue.toString() } } + .let { RcdbQueryParams(it) } + operator fun set(paramName: String, options: List>) { this.params[paramName] = options @@ -21,9 +27,6 @@ class RcdbQueryParamsBuilder { operator fun get(paramName: String) = this.params[paramName] - private fun List>?.append(options: List>) = - this?.toMutableList()?.also { it.addAll(options) } ?: options - fun keys() = this.params.keys.toSet() } @@ -40,110 +43,12 @@ data class RcdbUrlQuery(val baseUrl: String, val params: RcdbQueryParams) { } } +/** + * Builder for the parameters only (mainly because it might be possilbe in the future to have an API with a POST search object? + */ fun rcdbQueryParams(body: RcdbQueryParamsBuilder.() -> RcdbQueryParamsBuilder): RcdbQueryParams { val builder = RcdbQueryParamsBuilder() builder.body() return builder.build() } -// TODO: Find way to only have one generic parameter -sealed class RcdbParamOptionBuilder> { - private val paramList: MutableList = mutableListOf() - - open fun add(param: T): RcdbParamOptionBuilder { - paramList.add(param) - return this - } - - fun build() = paramList.toList() -} - -//region Vendors -class VendorBuilder : RcdbParamOptionBuilder() { - override fun add(param: Vendor): VendorBuilder { - super.add(param) - return this - } - - fun of(vendor: Vendor) = this.add(vendor) - fun vekoma() = this.add(Vendor.VEKOMA) - fun intamin() = this.add(Vendor.INTAMIN) - fun mack() = this.add(Vendor.MACK) - fun bandm() = this.add(Vendor.B_AND_M) - fun gerstlauer() = this.add(Vendor.GERSTLAUER) -} - -fun RcdbQueryParamsBuilder.vendors(body: VendorBuilder.() -> VendorBuilder): RcdbQueryParamsBuilder { - val builder = VendorBuilder() - builder.body() - this[Vendor.staticParamName] = builder.build() - return this -} -//endregion - -//region Order -class OrderBuilder : RcdbParamOptionBuilder() { - override fun add(param: Order): OrderBuilder { - super.add(param) - return this - } - - fun of(order: Order) = this.add(order) - fun manufacturer() = this.add(Order.MANUFACTURER) - fun inversion() = this.add(Order.INVERSIONS) -} - -fun RcdbQueryParamsBuilder.sortBy(body: OrderBuilder.() -> OrderBuilder): RcdbQueryParamsBuilder { - val builder = OrderBuilder() - builder.body() - this[Order.staticParamName] = builder.build() - return this - -} -//endregion - -//region Search type -fun RcdbQueryParamsBuilder.searchFor(searchType: SearchType) { - if (SearchType.staticParamName !in this.keys()) { - this[SearchType.staticParamName] = listOf(searchType) - } else { - error( - """Only one search type must ever be set - | Old type: ${this[SearchType.staticParamName]!![0].prettyName} - | New type: ${searchType.prettyName}""".trimMargin() - ) - } -} -//endregion - -//region Search Term -fun RcdbQueryParamsBuilder.searchTerm(term: String) { - if (SearchTerm.staticParamName !in this.keys()) { - this[SearchTerm.staticParamName] = listOf(SearchTerm(term)) - } else { - error( - """Only one search term must ever be set - | Old term: ${this[SearchTerm.staticParamName]!![0].paramValue} - | New term: $term""".trimMargin() - ) - } -} -//endregion - -//region Unknown fields -@Suppress("unused") -@Deprecated( - "The parameter for extra columns has not yet been discovered (if it even exists). Use multiple values in the `sortBy` param instead (first values take sorting precedence)", - ReplaceWith("sortBy"), DeprecationLevel.ERROR -) -fun RcdbQueryParamsBuilder.extraColumns(orders: List): Nothing = - error("The parameter for extra columns has not yet been discovered (if it even exists). Use multiple values in the `sortBy` param instead (first values take sorting precedence)") - -@Suppress("unused") -@Deprecated( - "The parameter for extra columns has not yet been discovered (if it even exists). Use multiple values in the `sortBy` param instead (first values take sorting precedence)", - ReplaceWith("sortBy"), DeprecationLevel.ERROR -) -fun RcdbQueryParamsBuilder.extraColumns(vararg orders: Order): Nothing = - error("The parameter for extra columns has not yet been discovered (if it even exists). Use multiple values in the `sortBy` param instead (first values take sorting precedence)") -//endregion diff --git a/src/test/kotlin/de/pheerai/rcdbquery/SampleTests.kt b/src/test/kotlin/de/pheerai/rcdbquery/SampleTests.kt deleted file mode 100644 index 7f892b2..0000000 --- a/src/test/kotlin/de/pheerai/rcdbquery/SampleTests.kt +++ /dev/null @@ -1,11 +0,0 @@ -package de.pheerai.rcdbquery - -import kotlin.test.Test -import kotlin.test.assertTrue - -class SampleTests { - @Test - fun testMe() { - assertTrue(true) - } -} diff --git a/src/test/kotlin/de/pheerai/rcdbquery/SampleTestsJVM.kt b/src/test/kotlin/de/pheerai/rcdbquery/SampleTestsJVM.kt deleted file mode 100644 index 331790e..0000000 --- a/src/test/kotlin/de/pheerai/rcdbquery/SampleTestsJVM.kt +++ /dev/null @@ -1,11 +0,0 @@ -package de.pheerai.rcdbquery - -import kotlin.test.Test -import kotlin.test.assertTrue - -class SampleTestsJVM { - @Test - fun testHello() { - assertTrue(true) - } -} diff --git a/src/test/kotlin/de/pheerai/rcdbquery/dsl/RcdbQueryDslTest.kt b/src/test/kotlin/de/pheerai/rcdbquery/dsl/RcdbQueryDslTest.kt index 7e96928..7ea5791 100644 --- a/src/test/kotlin/de/pheerai/rcdbquery/dsl/RcdbQueryDslTest.kt +++ b/src/test/kotlin/de/pheerai/rcdbquery/dsl/RcdbQueryDslTest.kt @@ -1,7 +1,8 @@ package de.pheerai.rcdbquery.dsl -import de.pheerai.rcdbquery.dataMappings.Order import de.pheerai.rcdbquery.dataMappings.Vendor +import de.pheerai.rcdbquery.dataMappings.sortBy +import de.pheerai.rcdbquery.dataMappings.vendors import kotlin.test.Test import kotlin.test.assertEquals @@ -9,7 +10,7 @@ class RcdbQueryDslTest { @Test fun testQueryParamBuilder() { assertEquals( - "https://www.rcdb.com/r.htm?mk=6836,6856,6905&order=24,30", + "https://www.rcdb.com/r.htm?mk=6836,6856,6905&order=24,30&ot=2", rcdbQuery { vendors { vekoma()