From 6d37da56b625ca4af5d14a8392333dfb04cbc9f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Oliver=20R=C3=BCmpelein?= Date: Sun, 23 Aug 2020 23:11:41 +0200 Subject: [PATCH] Make DSL simpler. - Still needs some fixes, e.g. how to avoid confusion (property setter/getter?) --- build.gradle.kts | 39 ++++++++--- gradle/wrapper/gradle-wrapper.jar | Bin 58694 -> 58910 bytes gradle/wrapper/gradle-wrapper.properties | 2 +- gradlew | 2 + gradlew.bat | 1 + settings.gradle.kts | 2 +- .../kotlin/de/pheerai/rcdbquery/Sample.kt | 16 ++--- .../dataMappings/category/CategoryBuilder.kt | 29 +------- .../dataMappings/category/paramBuilder.kt | 2 +- .../classification/ClassificationBuilder.kt | 4 +- .../classification/paramBuilder.kt | 2 +- .../dataMappings/design/DesignBuilder.kt | 9 +-- .../dataMappings/design/paramBuilder.kt | 2 +- .../internal/MultiParamBuilder.kt | 5 +- .../dataMappings/layout/LayoutBuilder.kt | 29 +------- .../dataMappings/layout/paramBuilder.kt | 6 +- .../dataMappings/order/OrderBuilder.kt | 26 +------ .../dataMappings/order/paramBuilder.kt | 2 +- .../dataMappings/page/paramBuilder.kt | 2 +- .../dataMappings/searchTerm/paramBuilder.kt | 2 +- .../dataMappings/searchType/paramBuilder.kt | 2 +- .../dataMappings/startsWith/paramBuilder.kt | 2 +- .../dataMappings/status/StatusBuilder.kt | 5 +- .../dataMappings/status/paramBuilder.kt | 2 +- .../dataMappings/thrill/ThrillBuilder.kt | 5 +- .../dataMappings/thrill/paramBuilder.kt | 4 +- .../dataMappings/type/TypeBuilder.kt | 3 +- .../dataMappings/type/paramBuilder.kt | 10 ++- .../rcdbquery/dataMappings/unknownParams.kt | 13 ++-- .../rcdbquery/dataMappings/vendor/Vendor.kt | 13 ++-- .../dataMappings/vendor/VendorBuilder.kt | 7 +- .../dataMappings/vendor/paramBuilder.kt | 2 +- .../pheerai/rcdbquery/dsl/params/Collector.kt | 48 +++++++++++++ .../de/pheerai/rcdbquery/dsl/params/Params.kt | 8 +++ .../rcdbquery/dsl/params/exceptions.kt | 3 + .../de/pheerai/rcdbquery/dsl/rcdbQueryDsl.kt | 64 ++---------------- .../kotlin/de/pheerai/rcdbquery/TestConfig.kt | 7 ++ .../pheerai/rcdbquery/dsl/RcdbQueryDslTest.kt | 61 +++++++++++------ 38 files changed, 202 insertions(+), 239 deletions(-) create mode 100644 src/main/kotlin/de/pheerai/rcdbquery/dsl/params/Collector.kt create mode 100644 src/main/kotlin/de/pheerai/rcdbquery/dsl/params/Params.kt create mode 100644 src/main/kotlin/de/pheerai/rcdbquery/dsl/params/exceptions.kt create mode 100644 src/test/kotlin/de/pheerai/rcdbquery/TestConfig.kt diff --git a/build.gradle.kts b/build.gradle.kts index 61b8cea..3a270b6 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,5 +1,15 @@ import org.jetbrains.kotlin.gradle.tasks.KotlinCompile +buildscript { + extra.apply { + set("kotestVersion", "4.2.0") + set("kotlinApiVersion", "1.4") + set("javaVersion", JavaVersion.VERSION_11) + } +} + +inline fun getFromExtra(prop: String) = project.extra[prop] as T + // TODO: Documentation // TODO: Source Jar // TODO: Doc Jar @@ -13,29 +23,36 @@ repositories { mavenCentral() } -project.version = "0.0.1" +project.version = "0.0.2" project.group = "de.pheerai.rcdb" - java { - targetCompatibility = JavaVersion.VERSION_11 - sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = getFromExtra("javaVersion") + sourceCompatibility = getFromExtra("javaVersion") } dependencies { implementation(kotlin("stdlib-jdk8")) - testImplementation("io.kotest:kotest-runner-junit5-jvm:4.0.5") - testImplementation("io.kotest:kotest-assertions-core-jvm:4.0.5") + testImplementation( + group = "io.kotest", + name = "kotest-runner-junit5-jvm", + version = getFromExtra("kotestVersion") + ) + testImplementation( + group = "io.kotest", + name = "kotest-assertions-core-jvm", + version = getFromExtra("kotestVersion") + ) } tasks { withType().configureEach { kotlinOptions { - freeCompilerArgs = listOf("-XXLanguage:+InlineClasses") - apiVersion = "1.3" - languageVersion = "1.3" - jvmTarget = JavaVersion.VERSION_11.toString() +// freeCompilerArgs = listOf("-XXLanguage:+InlineClasses") + apiVersion = getFromExtra("kotlinApiVersion") + languageVersion = getFromExtra("kotlinApiVersion") + jvmTarget = getFromExtra("javaVersion").toString() } } @@ -48,7 +65,7 @@ publishing { publications { create("maven") { groupId = project.group as String - artifactId = project.name as String + artifactId = project.name version = project.version as String from(components["java"]) diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 490fda8577df6c95960ba7077c43220e5bb2c0d9..62d4c053550b91381bbd28b1afc82d634bf73a8a 100644 GIT binary patch delta 6447 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 F{|nTN-B$nr diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 6623300..bb8b2fc 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.3-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-6.5.1-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index 2fe81a7..fbd7c51 100755 --- a/gradlew +++ b/gradlew @@ -82,6 +82,7 @@ esac CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + # Determine the Java command to use to start the JVM. if [ -n "$JAVA_HOME" ] ; then if [ -x "$JAVA_HOME/jre/sh/java" ] ; then @@ -129,6 +130,7 @@ fi if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then APP_HOME=`cygpath --path --mixed "$APP_HOME"` CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + JAVACMD=`cygpath --unix "$JAVACMD"` # We build the pattern for arguments to be converted via cygpath diff --git a/gradlew.bat b/gradlew.bat index 62bd9b9..5093609 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -84,6 +84,7 @@ set CMD_LINE_ARGS=%* set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + @rem Execute Gradle "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% diff --git a/settings.gradle.kts b/settings.gradle.kts index d7cc2ed..abccebe 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -1,6 +1,6 @@ pluginManagement { plugins { - kotlin("jvm") version "1.3.72" + kotlin("jvm") version "1.4.0" } } diff --git a/src/main/kotlin/de/pheerai/rcdbquery/Sample.kt b/src/main/kotlin/de/pheerai/rcdbquery/Sample.kt index 1631acb..78b389d 100644 --- a/src/main/kotlin/de/pheerai/rcdbquery/Sample.kt +++ b/src/main/kotlin/de/pheerai/rcdbquery/Sample.kt @@ -1,11 +1,12 @@ package de.pheerai.rcdbquery +import de.pheerai.rcdbquery.dataMappings.order.Order import de.pheerai.rcdbquery.dataMappings.order.sortBy import de.pheerai.rcdbquery.dataMappings.page.page import de.pheerai.rcdbquery.dataMappings.searchTerm.searchTerm import de.pheerai.rcdbquery.dataMappings.searchType.SearchType import de.pheerai.rcdbquery.dataMappings.searchType.searchType -import de.pheerai.rcdbquery.dataMappings.vendor.Vendor +import de.pheerai.rcdbquery.dataMappings.vendor.Vendor.* import de.pheerai.rcdbquery.dataMappings.vendor.vendors import de.pheerai.rcdbquery.dsl.rcdbQuery @@ -18,14 +19,13 @@ fun generateNameQueryUrl() = rcdbQuery { searchType(SearchType.COASTER) searchTerm("Dragon") vendors { - vekoma() - intamin() - mack() - of(Vendor.PRESTON_AND_BARBIERI) + VEKOMA() + INTAMIN() + MACK() } sortBy { - manufacturer() - inversions() + Order.MANUFACTURER() + Order.INVERSIONS() } } @@ -33,6 +33,6 @@ fun generatePageQueryUrl() = rcdbQuery { page(3) searchType(SearchType.COASTER) vendors { - intamin() + INTAMIN() } } diff --git a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/category/CategoryBuilder.kt b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/category/CategoryBuilder.kt index 2332b46..9571d0f 100644 --- a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/category/CategoryBuilder.kt +++ b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/category/CategoryBuilder.kt @@ -2,36 +2,11 @@ package de.pheerai.rcdbquery.dataMappings.category import de.pheerai.rcdbquery.dataMappings.internal.MultiParamBuilder -class CategoryBuilder: MultiParamBuilder() { +class CategoryBuilder : MultiParamBuilder() { override fun add(param: Category): CategoryBuilder { super.add(param) return this } - fun fourthDimension() = this.add(Category.FOURTH_DIMENSION) - fun brakeman() = this.add(Category.BRAKEMAN) - fun builtInhouse() = this.add(Category.BUILT_INHOUSE) - fun darkride() = this.add(Category.DARK_RIDE) - fun dualStation() = this.add(Category.DUAL_STATION) - fun enclosed() = this.add(Category.ENCLOSED) - fun floorless() = this.add(Category.FLOORLESS) - fun hybrid() = this.add(Category.HYBRID) - fun indoor() = this.add(Category.INDOOR) - fun mirror() = this.add(Category.MIRROR) - fun moebius() = this.add(Category.MOEBIUS) - fun onboardSound() = this.add(Category.ONBOARD_SOUND) - fun pendulum() = this.add(Category.PENDULUM) - fun quasiMoebius() = this.add(Category.QUASI_MOEBIUS) - fun rockingCars() = this.add(Category.ROCKING_CARS) - fun scenicRailway() = this.add(Category.SCENIC_RAILWAY) - fun shuttle() = this.add(Category.SHUTTLE) - fun sideFriction() = this.add(Category.SIDE_FRICTION) - fun singleRail() = this.add(Category.SINGLE_RAIL) - fun slidingStation() = this.add(Category.SLIDING_STATION) - fun spinningCars() = this.add(Category.SPINNING_CARS) - fun stackedStorage() = this.add(Category.STACKED_STORAGE) - fun turntableStation() = this.add(Category.TURNTABLE_STATION) - fun twin() = this.add(Category.TWIN) - fun virtualReality() = this.add(Category.VIRTUAL_REALITY) - fun waterCoaster() = this.add(Category.WATER_COASTER) + override fun Category.invoke() = add(this) } diff --git a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/category/paramBuilder.kt b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/category/paramBuilder.kt index 883c4fc..323cbcc 100644 --- a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/category/paramBuilder.kt +++ b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/category/paramBuilder.kt @@ -1,6 +1,6 @@ package de.pheerai.rcdbquery.dataMappings.category -import de.pheerai.rcdbquery.dsl.ParamsCollector +import de.pheerai.rcdbquery.dsl.params.ParamsCollector fun ParamsCollector.category(body: CategoryBuilder.() -> CategoryBuilder): ParamsCollector { val builder = CategoryBuilder() diff --git a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/classification/ClassificationBuilder.kt b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/classification/ClassificationBuilder.kt index 1b41907..9b8328b 100644 --- a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/classification/ClassificationBuilder.kt +++ b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/classification/ClassificationBuilder.kt @@ -8,7 +8,5 @@ class ClassificationBuilder : MultiParamBuilder() { return this } - fun rollerCoaster() = this.add(Classification.ROLLER_COASTER) - fun poweredCoaster() = this.add(Classification.POWERED_COASTER) - fun mountainCoaster() = this.add(Classification.MOUNTAIN_COASTER) + override fun Classification.invoke() = add(this) } diff --git a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/classification/paramBuilder.kt b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/classification/paramBuilder.kt index e79c401..14d7410 100644 --- a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/classification/paramBuilder.kt +++ b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/classification/paramBuilder.kt @@ -1,6 +1,6 @@ package de.pheerai.rcdbquery.dataMappings.classification -import de.pheerai.rcdbquery.dsl.ParamsCollector +import de.pheerai.rcdbquery.dsl.params.ParamsCollector fun ParamsCollector.classification(body: ClassificationBuilder.() -> ClassificationBuilder): ParamsCollector { val builder = ClassificationBuilder() diff --git a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/design/DesignBuilder.kt b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/design/DesignBuilder.kt index b340276..237130d 100644 --- a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/design/DesignBuilder.kt +++ b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/design/DesignBuilder.kt @@ -8,12 +8,5 @@ class DesignBuilder : MultiParamBuilder() { return this } - fun sitDown() = Design.SIT_DOWN - fun inverted() = Design.INVERTED - fun suspended() = Design.SUSPENDED - fun wing() = Design.WING - fun flying() = Design.FLYING - fun standUp() = Design.STAND_UP - fun bobsled() = Design.BOBSLED - fun pipeline() = Design.PIPELINE + override fun Design.invoke() = add(this) } diff --git a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/design/paramBuilder.kt b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/design/paramBuilder.kt index 5fbd84c..e94d32c 100644 --- a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/design/paramBuilder.kt +++ b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/design/paramBuilder.kt @@ -1,6 +1,6 @@ package de.pheerai.rcdbquery.dataMappings.design -import de.pheerai.rcdbquery.dsl.ParamsCollector +import de.pheerai.rcdbquery.dsl.params.ParamsCollector fun ParamsCollector.design(body: DesignBuilder.() -> DesignBuilder): ParamsCollector { val builder = DesignBuilder() diff --git a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/internal/MultiParamBuilder.kt b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/internal/MultiParamBuilder.kt index 829f4b2..e1cbe56 100644 --- a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/internal/MultiParamBuilder.kt +++ b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/internal/MultiParamBuilder.kt @@ -1,6 +1,6 @@ package de.pheerai.rcdbquery.dataMappings.internal -open class MultiParamBuilder> { +abstract class MultiParamBuilder> { private val paramList: MutableList = mutableListOf() open fun add(param: T): MultiParamBuilder { @@ -19,5 +19,6 @@ open class MultiParamBuilder> { } fun build() = paramList.toList() -} + abstract operator fun T.invoke(): MultiParamBuilder +} diff --git a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/layout/LayoutBuilder.kt b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/layout/LayoutBuilder.kt index c07957e..6f75765 100644 --- a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/layout/LayoutBuilder.kt +++ b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/layout/LayoutBuilder.kt @@ -8,32 +8,5 @@ class LayoutBuilder : MultiParamBuilder() { return this } - fun bigApple() = this.add(Layout.BIG_APPLE) - fun wackyWorm() = this.add(Layout.BIG_APPLE) - - fun circleDip() = this.add(Layout.CIRCLE_DIP) - fun circularGravityRailway() = this.add(Layout.CIRCULAR_GRAVIY_RAILWAY) - fun cyclone() = this.add(Layout.CYCLONE) - fun doubleFigureEight() = this.add(Layout.DOUBLE_FIGURE_EIGHT) - fun doubleOutAndBack() = this.add(Layout.DOUBLE_OUT_AND_BACK) - fun figureEight() = this.add(Layout.FIGURE_EIGHT) - fun jungleMouse() = this.add(Layout.JUNGLE_MOUSE) - fun lShapedOutAndBack() = this.add(Layout.L_SHAPED_OUT_AND_BACK) - fun miteMouse() = this.add(Layout.MITE_MOUSE) - fun outAndBack() = this.add(Layout.OUT_AND_BACK) - fun oval() = this.add(Layout.OVAL) - fun shuttleLoop() = this.add(Layout.SHUTTLE_LOOP) - fun singleHelixCenter() = this.add(Layout.SINGLE_HELIX_CENTER) - fun singleHelixLeft() = this.add(Layout.SINGLE_HELIX_LEFT) - fun singleHelixRear() = this.add(Layout.SINGLE_HELIX_REAR) - fun singleHelixRight() = this.add(Layout.SINGLE_HELIX_RIGHT) - fun terrain() = this.add(Layout.TERRAIN) - fun triangle() = this.add(Layout.TRIANGLE) - fun tripleOutAndBack() = this.add(Layout.TRIPLE_OUT_AND_BACK) - fun twinHelix() = this.add(Layout.TWIN_HELIX) - fun twister() = this.add(Layout.TWISTER) - fun uShuttle() = this.add(Layout.U_SHUTTLE) - fun wildMouse() = this.add(Layout.WILD_MOUSE) - fun zyklon() = this.add(Layout.ZYKLON) - fun galaxy() = this.add(Layout.ZYKLON) + override operator fun Layout.invoke() = add(this) } diff --git a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/layout/paramBuilder.kt b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/layout/paramBuilder.kt index 2acab17..611b9e2 100644 --- a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/layout/paramBuilder.kt +++ b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/layout/paramBuilder.kt @@ -1,10 +1,12 @@ package de.pheerai.rcdbquery.dataMappings.layout -import de.pheerai.rcdbquery.dsl.ParamsCollector +import de.pheerai.rcdbquery.dsl.params.ParamsCollector fun ParamsCollector.layout(body: LayoutBuilder.() -> LayoutBuilder): ParamsCollector { val builder = LayoutBuilder() - builder.body() + with(Layout) { + builder.body() + } this[Layout.paramKey] = builder.build() return this } diff --git a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/order/OrderBuilder.kt b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/order/OrderBuilder.kt index 3bc4bff..79570f2 100644 --- a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/order/OrderBuilder.kt +++ b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/order/OrderBuilder.kt @@ -18,30 +18,6 @@ class OrderBuilder : MultiParamBuilder() { return this } - fun of(order: Order) = this.add(order) - fun manufacturer() = this.add(Order.MANUFACTURER) - fun inversions() = this.add(Order.INVERSIONS) - fun name() = this.add(Order.NAME) - fun location() = this.add(Order.LOCATION) - fun park() = this.add(Order.PARK) - fun opened() = this.add(Order.OPENED) - fun closed() = this.add(Order.CLOSED) - fun entered() = this.add(Order.ENTERED) - fun type() = this.add(Order.TYPE) - fun design() = this.add(Order.DESIGN) - fun classification() = this.add(Order.CLASSIFICATION) - fun layout() = this.add(Order.LAYOUT) - fun model() = this.add(Order.MODEL) - fun modelLine() = this.add(Order.MODEL_LINE) - fun speed() = this.add(Order.SPEED) - fun height() = this.add(Order.HEIGHT) - fun drop() = this.add(Order.DROP) - fun length() = this.add(Order.LENGTH) - fun angle() = this.add(Order.ANGLE) - fun serialNo() = this.add(Order.SERIAL_NO) - fun scale() = this.add(Order.SCALE) - fun rideTime() = this.add(Order.RIDE_TIME) - fun state() = this.add(Order.STATUS) - fun closing() = this.add(Order.CLOSING) + override fun Order.invoke() = add(this) fun allRelevant() = this.addAll(Order.values().filter { it.relevantForAll }) } diff --git a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/order/paramBuilder.kt b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/order/paramBuilder.kt index 5d6a094..2c205ee 100644 --- a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/order/paramBuilder.kt +++ b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/order/paramBuilder.kt @@ -1,6 +1,6 @@ package de.pheerai.rcdbquery.dataMappings.order -import de.pheerai.rcdbquery.dsl.ParamsCollector +import de.pheerai.rcdbquery.dsl.params.ParamsCollector fun ParamsCollector.sortBy(body: OrderBuilder.() -> OrderBuilder): ParamsCollector { val builder = OrderBuilder() diff --git a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/page/paramBuilder.kt b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/page/paramBuilder.kt index 1848292..4cf3d14 100644 --- a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/page/paramBuilder.kt +++ b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/page/paramBuilder.kt @@ -1,6 +1,6 @@ package de.pheerai.rcdbquery.dataMappings.page -import de.pheerai.rcdbquery.dsl.ParamsCollector +import de.pheerai.rcdbquery.dsl.params.ParamsCollector fun ParamsCollector.page(page: Long) = also { this[Page.paramKey] = diff --git a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/searchTerm/paramBuilder.kt b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/searchTerm/paramBuilder.kt index e4127ae..ab3d49f 100644 --- a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/searchTerm/paramBuilder.kt +++ b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/searchTerm/paramBuilder.kt @@ -1,6 +1,6 @@ package de.pheerai.rcdbquery.dataMappings.searchTerm -import de.pheerai.rcdbquery.dsl.ParamsCollector +import de.pheerai.rcdbquery.dsl.params.ParamsCollector fun ParamsCollector.searchTerm(term: String) = also { it[SearchTerm.paramKey] = listOf( diff --git a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/searchType/paramBuilder.kt b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/searchType/paramBuilder.kt index a5e1711..08fb494 100644 --- a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/searchType/paramBuilder.kt +++ b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/searchType/paramBuilder.kt @@ -1,6 +1,6 @@ package de.pheerai.rcdbquery.dataMappings.searchType -import de.pheerai.rcdbquery.dsl.ParamsCollector +import de.pheerai.rcdbquery.dsl.params.ParamsCollector fun ParamsCollector.searchType(searchType: SearchType) = also { it[SearchType.paramKey] = searchType diff --git a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/startsWith/paramBuilder.kt b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/startsWith/paramBuilder.kt index 70e04f8..f23422a 100644 --- a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/startsWith/paramBuilder.kt +++ b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/startsWith/paramBuilder.kt @@ -1,6 +1,6 @@ package de.pheerai.rcdbquery.dataMappings.startsWith -import de.pheerai.rcdbquery.dsl.ParamsCollector +import de.pheerai.rcdbquery.dsl.params.ParamsCollector fun ParamsCollector.startsWith(term: String) = also { this[StartsWith.paramKey] = diff --git a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/status/StatusBuilder.kt b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/status/StatusBuilder.kt index 4a27274..752da5b 100644 --- a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/status/StatusBuilder.kt +++ b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/status/StatusBuilder.kt @@ -8,8 +8,5 @@ class StatusBuilder : MultiParamBuilder() { return this } - fun sbno() = this.add(Status.SBNO) - fun operating() = this.add(Status.OPERATING) - fun underConstruction() = this.add(Status.UNDER_CONSTRUCTION) - fun stored() = this.add(Status.STORED) + override fun Status.invoke() = add(this) } diff --git a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/status/paramBuilder.kt b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/status/paramBuilder.kt index 9d133b0..7fd8830 100644 --- a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/status/paramBuilder.kt +++ b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/status/paramBuilder.kt @@ -1,6 +1,6 @@ package de.pheerai.rcdbquery.dataMappings.status -import de.pheerai.rcdbquery.dsl.ParamsCollector +import de.pheerai.rcdbquery.dsl.params.ParamsCollector fun ParamsCollector.status(body: StatusBuilder.() -> StatusBuilder): ParamsCollector { val builder = StatusBuilder() diff --git a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/thrill/ThrillBuilder.kt b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/thrill/ThrillBuilder.kt index 7352839..7dab9e9 100644 --- a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/thrill/ThrillBuilder.kt +++ b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/thrill/ThrillBuilder.kt @@ -8,8 +8,5 @@ class ThrillBuilder : MultiParamBuilder() { return this } - fun kiddie() = this.add(Thrill.KIDDIE) - fun family() = this.add(Thrill.FAMILY) - fun thrill() = this.add(Thrill.THRILL) - fun extreme() = this.add(Thrill.EXTREME) + override fun Thrill.invoke() = add(this) } diff --git a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/thrill/paramBuilder.kt b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/thrill/paramBuilder.kt index bfac7c2..da3ba1b 100644 --- a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/thrill/paramBuilder.kt +++ b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/thrill/paramBuilder.kt @@ -1,8 +1,8 @@ package de.pheerai.rcdbquery.dataMappings.thrill -import de.pheerai.rcdbquery.dsl.ParamsCollector +import de.pheerai.rcdbquery.dsl.params.ParamsCollector -fun ParamsCollector.type(body: ThrillBuilder.() -> ThrillBuilder): ParamsCollector { +fun ParamsCollector.thrill(body: ThrillBuilder.() -> ThrillBuilder): ParamsCollector { val builder = ThrillBuilder() builder.body() this[Thrill.paramKey] = builder.build() diff --git a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/type/TypeBuilder.kt b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/type/TypeBuilder.kt index 7d85e8f..fd0fccd 100644 --- a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/type/TypeBuilder.kt +++ b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/type/TypeBuilder.kt @@ -8,6 +8,5 @@ class TypeBuilder : MultiParamBuilder() { return this } - fun steel() = this.add(Type.STEEL) - fun wood() = this.add(Type.WOOD) + override fun Type.invoke() = add(this) } diff --git a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/type/paramBuilder.kt b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/type/paramBuilder.kt index 56b1895..db509eb 100644 --- a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/type/paramBuilder.kt +++ b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/type/paramBuilder.kt @@ -1,12 +1,10 @@ package de.pheerai.rcdbquery.dataMappings.type -import de.pheerai.rcdbquery.dataMappings.thrill.Thrill -import de.pheerai.rcdbquery.dataMappings.thrill.ThrillBuilder -import de.pheerai.rcdbquery.dsl.ParamsCollector +import de.pheerai.rcdbquery.dsl.params.ParamsCollector -fun ParamsCollector.thrill(body: ThrillBuilder.() -> ThrillBuilder): ParamsCollector { - val builder = ThrillBuilder() +fun ParamsCollector.type(body: TypeBuilder.() -> TypeBuilder): ParamsCollector { + val builder = TypeBuilder() builder.body() - this[Thrill.paramKey] = builder.build() + this[Type.paramKey] = 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 index da1678c..fe72e91 100644 --- a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/unknownParams.kt +++ b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/unknownParams.kt @@ -1,20 +1,23 @@ package de.pheerai.rcdbquery.dataMappings import de.pheerai.rcdbquery.dataMappings.order.Order -import de.pheerai.rcdbquery.dsl.ParamsCollector +import de.pheerai.rcdbquery.dsl.params.ParamsCollector + +const val EXTRA_COLUMNS_ERROR_MESSAGE = + "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)", + EXTRA_COLUMNS_ERROR_MESSAGE, ReplaceWith("sortBy"), DeprecationLevel.ERROR ) fun ParamsCollector.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)") + error(EXTRA_COLUMNS_ERROR_MESSAGE) @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)", + EXTRA_COLUMNS_ERROR_MESSAGE, ReplaceWith("sortBy"), DeprecationLevel.ERROR ) fun ParamsCollector.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)") + error(EXTRA_COLUMNS_ERROR_MESSAGE) diff --git a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/vendor/Vendor.kt b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/vendor/Vendor.kt index 4a16958..c53ebbe 100644 --- a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/vendor/Vendor.kt +++ b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/vendor/Vendor.kt @@ -8,7 +8,7 @@ import de.pheerai.rcdbquery.dataMappings.internal.StringGeneratable enum class Vendor( override val prettyName: String, override val fullName: String, - override val paramValue: Long + override val paramValue: Long, ) : RcdbParamOption, RcdbItem { YAQIAO_MACHINE("Yaqiao", "Yaqiao Machine", 6471), CREDIBLE("Credible", 6584), @@ -118,7 +118,7 @@ enum class Vendor( TAKAHASHI_KIKAI_SANGYO("Takahashi Kikai Sangyo", 7472), DYNAMIC("Dynamic Attractions", 7489), GOLDEN_HORSE("Golden Horse", 7492), - WIEGAND("Wiegand", "Josef Wiegand GmbH & Co. KG", 7514), + WIEGAND("Wiegand", 7514), ASCOT("Ascot Design", 7530), DAL_AMUSEMENT_RIDES("DAL Amusement Rides Company", 7536), CHILDRESS_COASTER("Childress Coaster", 7550), @@ -255,9 +255,12 @@ enum class Vendor( fun searchByName(name: String): List { val searchName = name.toLowerCase() - return values().filter { - it.fullName.toLowerCase().contains(searchName) - }.toList() + return values() + .filter { + it.fullName + .toLowerCase() + .contains(searchName) + }.toList() } } } diff --git a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/vendor/VendorBuilder.kt b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/vendor/VendorBuilder.kt index 66b866a..5a8986e 100644 --- a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/vendor/VendorBuilder.kt +++ b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/vendor/VendorBuilder.kt @@ -8,10 +8,5 @@ class VendorBuilder : MultiParamBuilder() { 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) + override fun Vendor.invoke() = add(this) } diff --git a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/vendor/paramBuilder.kt b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/vendor/paramBuilder.kt index 0fe5f20..5a36515 100644 --- a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/vendor/paramBuilder.kt +++ b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/vendor/paramBuilder.kt @@ -1,6 +1,6 @@ package de.pheerai.rcdbquery.dataMappings.vendor -import de.pheerai.rcdbquery.dsl.ParamsCollector +import de.pheerai.rcdbquery.dsl.params.ParamsCollector // TODO: Try to generify. This is currently lacking some sort of "This interface requires a companion implementing that interface" fun ParamsCollector.vendors(body: VendorBuilder.() -> VendorBuilder): ParamsCollector { diff --git a/src/main/kotlin/de/pheerai/rcdbquery/dsl/params/Collector.kt b/src/main/kotlin/de/pheerai/rcdbquery/dsl/params/Collector.kt new file mode 100644 index 0000000..cf591a0 --- /dev/null +++ b/src/main/kotlin/de/pheerai/rcdbquery/dsl/params/Collector.kt @@ -0,0 +1,48 @@ +package de.pheerai.rcdbquery.dsl.params + +import de.pheerai.rcdbquery.dataMappings.internal.RcdbParamOption +import de.pheerai.rcdbquery.dataMappings.searchType.SearchType +import de.pheerai.rcdbquery.dsl.RcdbParams + +class ParamsCollector { + private val multiParams: MutableMap>> = mutableMapOf() + private val singleParams: MutableMap> = mutableMapOf() + + fun build() = RcdbParams(buildMulti(), buildSingle()) + + /** + * Creates the Query Params from this builder. + * If no Search type has been set, this will default to "Coaster" + */ + private fun buildMulti() = multiParams.apply { + // Defaults go here, if any + } + .filter { it.value.isNotEmpty() } + .mapValues { e -> e.value.map { o -> o.paramValue.toString() } } + .let { MultiParams(it) } + + private fun buildSingle() = singleParams.apply { + putIfAbsent(SearchType.paramKey, SearchType.COASTER) + } + .mapValues { e -> e.value.paramValue.toString() } + .let { SingleParams(it) } + + operator fun set(paramName: String, options: List>) { + this.multiParams[paramName] = options + } + + operator fun set(paramName: String, option: RcdbParamOption) { + if (paramName !in singleParams && paramName !in multiParams) { + this.singleParams[paramName] = option + } else { + throw ParamAlreadySetException("Parameter $paramName already set.") + } + } + + fun getSingle(paramName: String) = this.multiParams[paramName] ?: this.singleParams[paramName] + fun getMulti(paramName: String) = this.multiParams[paramName] + + fun keys() = this.multiKeys().plus(singleKeys()) + private fun multiKeys() = this.multiParams.keys.toSet() + private fun singleKeys() = this.singleParams.keys.toSet() +} diff --git a/src/main/kotlin/de/pheerai/rcdbquery/dsl/params/Params.kt b/src/main/kotlin/de/pheerai/rcdbquery/dsl/params/Params.kt new file mode 100644 index 0000000..b144c14 --- /dev/null +++ b/src/main/kotlin/de/pheerai/rcdbquery/dsl/params/Params.kt @@ -0,0 +1,8 @@ +package de.pheerai.rcdbquery.dsl.params + +sealed class BaseParams { + abstract val params: Map +} + +class MultiParams(override val params: Map>) : BaseParams>() +class SingleParams(override val params: Map) : BaseParams() diff --git a/src/main/kotlin/de/pheerai/rcdbquery/dsl/params/exceptions.kt b/src/main/kotlin/de/pheerai/rcdbquery/dsl/params/exceptions.kt new file mode 100644 index 0000000..f3c485d --- /dev/null +++ b/src/main/kotlin/de/pheerai/rcdbquery/dsl/params/exceptions.kt @@ -0,0 +1,3 @@ +package de.pheerai.rcdbquery.dsl.params + +class ParamAlreadySetException(message: String) : IllegalArgumentException(message) diff --git a/src/main/kotlin/de/pheerai/rcdbquery/dsl/rcdbQueryDsl.kt b/src/main/kotlin/de/pheerai/rcdbquery/dsl/rcdbQueryDsl.kt index 0ca5f9d..31a5217 100644 --- a/src/main/kotlin/de/pheerai/rcdbquery/dsl/rcdbQueryDsl.kt +++ b/src/main/kotlin/de/pheerai/rcdbquery/dsl/rcdbQueryDsl.kt @@ -1,19 +1,19 @@ package de.pheerai.rcdbquery.dsl -import de.pheerai.rcdbquery.dataMappings.internal.RcdbParamOption -import de.pheerai.rcdbquery.dataMappings.searchType.SearchType - -// TODO: Restructure +import de.pheerai.rcdbquery.dsl.params.MultiParams +import de.pheerai.rcdbquery.dsl.params.ParamsCollector +import de.pheerai.rcdbquery.dsl.params.SingleParams data class RcdbParams( val multiParams: MultiParams, - val singleParams: SingleParams + val singleParams: SingleParams, ) { fun toStrings(): List { val multiParamSequence: Sequence> = this.multiParams .params + .mapValues { it.value.joinToString(separator = ",") } + .map { it.toPair() } .asSequence() - .map { e -> e.key to e.value.joinToString(separator = ",") } val singleParamSequence: Sequence> = this.singleParams .params .asSequence() @@ -24,58 +24,6 @@ data class RcdbParams( } } -sealed class Params { - abstract val params: Map -} - -class ParamAlreadySetException(message: String) : IllegalArgumentException(message) - -class MultiParams(override val params: Map>) : Params>() -class SingleParams(override val params: Map) : Params() - -class ParamsCollector { - private val multiParams: MutableMap>> = mutableMapOf() - private val singleParams: MutableMap> = mutableMapOf() - - fun build() = RcdbParams(buildMulti(), buildSingle()) - - /** - * Creates the Query Params from this builder. - * If no Search type has been set, this will default to "Coaster" - */ - private fun buildMulti() = multiParams.apply { - // Defaults go here, if any - } - .filter { it.value.isNotEmpty() } - .mapValues { e -> e.value.map { o -> o.paramValue.toString() } } - .let { MultiParams(it) } - - private fun buildSingle() = singleParams.apply { - putIfAbsent(SearchType.paramKey, SearchType.COASTER) - } - .mapValues { e -> e.value.paramValue.toString() } - .let { SingleParams(it) } - - operator fun set(paramName: String, options: List>) { - this.multiParams[paramName] = options - } - - operator fun set(paramName: String, option: RcdbParamOption) { - if (paramName !in singleParams && paramName !in multiParams) { - this.singleParams[paramName] = option - } else { - throw ParamAlreadySetException("Parameter $paramName already set.") - } - } - - fun getSingle(paramName: String) = this.multiParams[paramName] ?: this.singleParams[paramName] - fun getMulti(paramName: String) = this.multiParams[paramName] - - fun keys() = this.multiKeys().plus(singleKeys()) - private fun multiKeys() = this.multiParams.keys.toSet() - private fun singleKeys() = this.singleParams.keys.toSet() -} - fun rcdbQuery(body: ParamsCollector.() -> ParamsCollector) = RcdbUrlQuery("https://www.rcdb.com/r.htm?", rcdbQueryParams(body)).toString() diff --git a/src/test/kotlin/de/pheerai/rcdbquery/TestConfig.kt b/src/test/kotlin/de/pheerai/rcdbquery/TestConfig.kt new file mode 100644 index 0000000..c333aae --- /dev/null +++ b/src/test/kotlin/de/pheerai/rcdbquery/TestConfig.kt @@ -0,0 +1,7 @@ +package de.pheerai.rcdbquery + +import io.kotest.core.config.AbstractProjectConfig + +class TestConfig : AbstractProjectConfig() { + override val globalAssertSoftly = true +} diff --git a/src/test/kotlin/de/pheerai/rcdbquery/dsl/RcdbQueryDslTest.kt b/src/test/kotlin/de/pheerai/rcdbquery/dsl/RcdbQueryDslTest.kt index af911c3..71ab8e1 100644 --- a/src/test/kotlin/de/pheerai/rcdbquery/dsl/RcdbQueryDslTest.kt +++ b/src/test/kotlin/de/pheerai/rcdbquery/dsl/RcdbQueryDslTest.kt @@ -1,38 +1,57 @@ package de.pheerai.rcdbquery.dsl -import de.pheerai.rcdbquery.dataMappings.vendor.Vendor +import de.pheerai.rcdbquery.dataMappings.order.Order import de.pheerai.rcdbquery.dataMappings.order.sortBy +import de.pheerai.rcdbquery.dataMappings.searchType.SearchType +import de.pheerai.rcdbquery.dataMappings.searchType.searchType +import de.pheerai.rcdbquery.dataMappings.type.Type +import de.pheerai.rcdbquery.dataMappings.type.type +import de.pheerai.rcdbquery.dataMappings.vendor.Vendor import de.pheerai.rcdbquery.dataMappings.vendor.vendors +import de.pheerai.rcdbquery.dsl.params.ParamAlreadySetException +import io.kotest.assertions.asClue import io.kotest.core.spec.style.StringSpec -import io.kotest.matchers.shouldBe import io.kotest.matchers.string.shouldContain +import io.kotest.matchers.string.shouldHaveLength +import org.junit.jupiter.api.assertThrows class RcdbQueryDslTest : StringSpec({ - "should generate a proper URL" { - val actual = rcdbQuery { + rcdbQuery { vendors { - vekoma() - mack() - of(Vendor.MAURER) + Vendor.VEKOMA() + Vendor.MACK() + Vendor.MAURER() } sortBy { - inversions() - manufacturer() + Order.INVERSIONS() + Order.MANUFACTURER() + } + }.asClue { + it shouldHaveLength 61 + it shouldContain "https://www.rcdb.com/r.htm?" + it shouldContain "mk=" + it shouldContain "6836" + it shouldContain "6856" + it shouldContain "6905" + it shouldContain "order=" + it shouldContain "24" + it shouldContain "30" + it shouldContain "ot=2" + it.filter { c -> c == '&' } shouldHaveLength 2 + } + } + + "Should throw if unique value is reset" { + assertThrows { + rcdbQuery { + searchType(SearchType.COASTER) + type { + Type.WOOD() + } + searchType(SearchType.AMUSEMENT_PARK) } } - - actual.length shouldBe 61 - actual.shouldContain("https://www.rcdb.com/r.htm?") - actual.shouldContain("mk=") - actual.shouldContain("6836") - actual.shouldContain("6856") - actual.shouldContain("6905") - actual.shouldContain("order=") - actual.shouldContain("24") - actual.shouldContain("30") - actual.shouldContain("ot=2") - actual.filter { it == '&' }.length shouldBe 2 } })