diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml new file mode 100644 index 0000000..c0eb90c --- /dev/null +++ b/.gitlab-ci.yml @@ -0,0 +1,30 @@ +# Based on https://gitlab.com/gitlab-org/gitlab/-/blob/master/lib/gitlab/ci/templates/Gradle.gitlab-ci.yml +image: gradle:jdk11 + +variables: + GRADLE_OPTS: "-Dorg.gradle.daemon=false" + +before_script: + - export GRADLE_USER_HOME=`pwd`/.gradle + +build: + stage: build + script: gradle --build-cache assemble + cache: + key: "$CI_COMMIT_REF_NAME" + policy: push + paths: + - build + - .gradle + +artifact: + stage: deploy + script: gradle publish + rules: + - if: '$CI_COMMIT_BRANCH == "master"' + cache: + key: "$CI_COMMIT_REF_NAME" + policy: pull-push + paths: + - build + - .gradle diff --git a/build.gradle.kts b/build.gradle.kts index 61b8cea..4ebd22b 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,5 +1,16 @@ +import org.jetbrains.kotlin.gradle.dsl.ExplicitApiMode import org.jetbrains.kotlin.gradle.tasks.KotlinCompile +buildscript { + extra.apply { + set("pheeraiBomVersion", "0.0.3-SNAPSHOT") + 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 @@ -11,31 +22,42 @@ plugins { repositories { mavenCentral() + jcenter() + google() + maven { + url = uri("https://git.f3l.de/api/v4/projects/160/packages/maven") + mavenContent { + includeGroup("de.pheerai") + includeGroup("de.pheerai.eap") + } + } } -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") +} + +kotlin { + explicitApi = ExplicitApiMode.Strict } dependencies { - implementation(kotlin("stdlib-jdk8")) + implementation(enforcedPlatform("de.pheerai:kotlin-crawler-app-bom:${getFromExtra("pheeraiBomVersion")}")) - testImplementation("io.kotest:kotest-runner-junit5-jvm:4.0.5") - testImplementation("io.kotest:kotest-assertions-core-jvm:4.0.5") + testImplementation("io.kotest", "kotest-runner-junit5-jvm") + testImplementation("io.kotest", "kotest-assertions-core-jvm") } tasks { withType().configureEach { kotlinOptions { - freeCompilerArgs = listOf("-XXLanguage:+InlineClasses") - apiVersion = "1.3" - languageVersion = "1.3" - jvmTarget = JavaVersion.VERSION_11.toString() + apiVersion = getFromExtra("kotlinApiVersion") + languageVersion = getFromExtra("kotlinApiVersion") + jvmTarget = getFromExtra("javaVersion").toString() } } @@ -46,13 +68,21 @@ tasks { publishing { publications { - create("maven") { - groupId = project.group as String - artifactId = project.name as String - version = project.version as String - + create("QueryBuilder") { from(components["java"]) - + } + repositories { + maven { + url = uri("https://git.f3l.de/api/v4/projects/180/packages/maven") + name = "GitLab" + credentials(HttpHeaderCredentials::class.java) { + name = "Job-Token" + value = System.getenv("CI_JOB_TOKEN") + } + authentication { + create("header") + } + } } } } diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 490fda8..62d4c05 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 6623300..442d913 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.8.3-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..75c042b 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.30" } } diff --git a/src/main/kotlin/de/pheerai/rcdbquery/Sample.kt b/src/main/kotlin/de/pheerai/rcdbquery/Sample.kt index 1631acb..df7c6d8 100644 --- a/src/main/kotlin/de/pheerai/rcdbquery/Sample.kt +++ b/src/main/kotlin/de/pheerai/rcdbquery/Sample.kt @@ -1,38 +1,38 @@ 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 -fun main() { +public fun main() { println(generateNameQueryUrl()) println(generatePageQueryUrl()) } -fun generateNameQueryUrl() = rcdbQuery { +private 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() } } -fun generatePageQueryUrl() = rcdbQuery { +private fun generatePageQueryUrl() = rcdbQuery { page(3) searchType(SearchType.COASTER) vendors { - intamin() + INTAMIN() } } diff --git a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/category/Category.kt b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/category/Category.kt index 89ed396..810a0fb 100644 --- a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/category/Category.kt +++ b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/category/Category.kt @@ -3,7 +3,7 @@ package de.pheerai.rcdbquery.dataMappings.category import de.pheerai.rcdbquery.dataMappings.internal.RcdbParamOption import de.pheerai.rcdbquery.dataMappings.internal.StringGeneratable -enum class Category( +public enum class Category( override val prettyName: String, override val fullName: String, override val paramValue: Long @@ -38,7 +38,7 @@ enum class Category( constructor(name: String, paramValue: Long) : this(name, name, paramValue) - companion object : StringGeneratable { + internal companion object : StringGeneratable { override val paramKey = "ca" override fun of(input: String): Category? = when (input) { "4th Dimension" -> FOURTH_DIMENSION 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..7791c40 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() { +public 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(): CategoryBuilder = 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..804cb8f 100644 --- a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/category/paramBuilder.kt +++ b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/category/paramBuilder.kt @@ -1,8 +1,8 @@ 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 { +public fun ParamsCollector.category(body: CategoryBuilder.() -> CategoryBuilder): ParamsCollector { val builder = CategoryBuilder() builder.body() this[Category.paramKey] = builder.build() diff --git a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/classification/Classification.kt b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/classification/Classification.kt index 6d471b9..5f26c96 100644 --- a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/classification/Classification.kt +++ b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/classification/Classification.kt @@ -3,7 +3,7 @@ package de.pheerai.rcdbquery.dataMappings.classification import de.pheerai.rcdbquery.dataMappings.internal.RcdbParamOption import de.pheerai.rcdbquery.dataMappings.internal.StringGeneratable -enum class Classification( +public enum class Classification( override val prettyName: String, override val fullName: String, override val paramValue: Long @@ -15,8 +15,8 @@ enum class Classification( constructor(name: String, paramValue: Long) : this(name, name, paramValue) - companion object: StringGeneratable { - override fun of(input: String) = values().find { it.fullName == input } - override val paramKey = "cs" + public companion object: StringGeneratable { + override fun of(input: String): Classification? = values().find { it.fullName == input } + override val paramKey: String = "cs" } } 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..18cbc5a 100644 --- a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/classification/ClassificationBuilder.kt +++ b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/classification/ClassificationBuilder.kt @@ -2,13 +2,11 @@ package de.pheerai.rcdbquery.dataMappings.classification import de.pheerai.rcdbquery.dataMappings.internal.MultiParamBuilder -class ClassificationBuilder : MultiParamBuilder() { +public class ClassificationBuilder : MultiParamBuilder() { override fun add(param: Classification): ClassificationBuilder { super.add(param) 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(): ClassificationBuilder = 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..d483c8e 100644 --- a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/classification/paramBuilder.kt +++ b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/classification/paramBuilder.kt @@ -1,8 +1,8 @@ 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 { +public fun ParamsCollector.classification(body: ClassificationBuilder.() -> ClassificationBuilder): ParamsCollector { val builder = ClassificationBuilder() builder.body() this[Classification.paramKey] = builder.build() diff --git a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/design/Design.kt b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/design/Design.kt index 2ac4369..b0ecfc6 100644 --- a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/design/Design.kt +++ b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/design/Design.kt @@ -3,7 +3,7 @@ package de.pheerai.rcdbquery.dataMappings.design import de.pheerai.rcdbquery.dataMappings.internal.RcdbParamOption import de.pheerai.rcdbquery.dataMappings.internal.StringGeneratable -enum class Design( +public enum class Design( override val prettyName: String, override val fullName: String, override val paramValue: Long @@ -20,8 +20,8 @@ enum class Design( constructor(name: String, paramValue: Long) : this(name, name, paramValue) - companion object : StringGeneratable { - override val paramKey = "de" + public companion object : StringGeneratable { + override val paramKey: String = "de" override fun of(input: String): Design? = when (input) { "Sit Down" -> SIT_DOWN "Inverted" -> INVERTED 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..0bafb99 100644 --- a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/design/DesignBuilder.kt +++ b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/design/DesignBuilder.kt @@ -2,18 +2,11 @@ package de.pheerai.rcdbquery.dataMappings.design import de.pheerai.rcdbquery.dataMappings.internal.MultiParamBuilder -class DesignBuilder : MultiParamBuilder() { +public class DesignBuilder : MultiParamBuilder() { override fun add(param: Design): DesignBuilder { super.add(param) 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(): DesignBuilder = 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..3095a9b 100644 --- a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/design/paramBuilder.kt +++ b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/design/paramBuilder.kt @@ -1,8 +1,8 @@ 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 { +public fun ParamsCollector.design(body: DesignBuilder.() -> DesignBuilder): ParamsCollector { val builder = DesignBuilder() builder.body() this[Design.paramKey] = builder.build() 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..5d04f01 100644 --- a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/internal/MultiParamBuilder.kt +++ b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/internal/MultiParamBuilder.kt @@ -1,9 +1,9 @@ package de.pheerai.rcdbquery.dataMappings.internal -open class MultiParamBuilder> { +public abstract class MultiParamBuilder> { private val paramList: MutableList = mutableListOf() - open fun add(param: T): MultiParamBuilder { + public open fun add(param: T): MultiParamBuilder { paramList.add(param) return this } @@ -18,6 +18,7 @@ open class MultiParamBuilder> { return this } - fun build() = paramList.toList() -} + public fun build(): List = paramList.toList() + public abstract operator fun T.invoke(): MultiParamBuilder +} diff --git a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/internal/ParamKey.kt b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/internal/ParamKey.kt index 2e32fc6..205978d 100644 --- a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/internal/ParamKey.kt +++ b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/internal/ParamKey.kt @@ -1,5 +1,5 @@ package de.pheerai.rcdbquery.dataMappings.internal -interface ParamKey { +internal interface ParamKey { val paramKey: String } diff --git a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/internal/RcdbItem.kt b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/internal/RcdbItem.kt index 575408f..913bb42 100644 --- a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/internal/RcdbItem.kt +++ b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/internal/RcdbItem.kt @@ -1,6 +1,6 @@ package de.pheerai.rcdbquery.dataMappings.internal -interface RcdbItem { +internal interface RcdbItem { val url: String get() ="https://www.rcdb.com/${id}.htm" val id: Long diff --git a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/internal/RcdbParamOption.kt b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/internal/RcdbParamOption.kt index 98f1ed6..5134789 100644 --- a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/internal/RcdbParamOption.kt +++ b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/internal/RcdbParamOption.kt @@ -1,7 +1,7 @@ package de.pheerai.rcdbquery.dataMappings.internal -interface RcdbParamOption { - val prettyName: String - val fullName: String - val paramValue: T +public interface RcdbParamOption { + public val prettyName: String + public val fullName: String + public val paramValue: T } diff --git a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/internal/RelevantForAll.kt b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/internal/RelevantForAll.kt index fdd6d7c..a744af0 100644 --- a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/internal/RelevantForAll.kt +++ b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/internal/RelevantForAll.kt @@ -1,5 +1,5 @@ package de.pheerai.rcdbquery.dataMappings.internal -interface RelevantForAll { +internal interface RelevantForAll { val relevantForAll: Boolean } diff --git a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/internal/StringGeneratable.kt b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/internal/StringGeneratable.kt index 56762a5..071fd22 100644 --- a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/internal/StringGeneratable.kt +++ b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/internal/StringGeneratable.kt @@ -1,5 +1,5 @@ package de.pheerai.rcdbquery.dataMappings.internal -interface StringGeneratable: ParamKey { +internal interface StringGeneratable: ParamKey { fun of(input: String): T? } diff --git a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/layout/Layout.kt b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/layout/Layout.kt index f6bf566..350a68c 100644 --- a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/layout/Layout.kt +++ b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/layout/Layout.kt @@ -3,7 +3,7 @@ package de.pheerai.rcdbquery.dataMappings.layout import de.pheerai.rcdbquery.dataMappings.internal.RcdbParamOption import de.pheerai.rcdbquery.dataMappings.internal.StringGeneratable -enum class Layout( +public enum class Layout( override val prettyName: String, override val fullName: String, override val paramValue: Long @@ -37,8 +37,8 @@ enum class Layout( constructor(name: String, paramValue: Long) : this(name, name, paramValue) - companion object : StringGeneratable { - override val paramKey = "lo" + public companion object : StringGeneratable { + override val paramKey: String = "lo" override fun of(input: String): Layout? = values().find { input == it.fullName } } 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..cac8fcd 100644 --- a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/layout/LayoutBuilder.kt +++ b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/layout/LayoutBuilder.kt @@ -2,38 +2,11 @@ package de.pheerai.rcdbquery.dataMappings.layout import de.pheerai.rcdbquery.dataMappings.internal.MultiParamBuilder -class LayoutBuilder : MultiParamBuilder() { +public class LayoutBuilder : MultiParamBuilder() { override fun add(param: Layout): LayoutBuilder { super.add(param) 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(): LayoutBuilder = 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..edb8e1e 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 { +public 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/Order.kt b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/order/Order.kt index fee5bdf..640c3d1 100644 --- a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/order/Order.kt +++ b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/order/Order.kt @@ -3,14 +3,13 @@ package de.pheerai.rcdbquery.dataMappings.order import de.pheerai.rcdbquery.dataMappings.internal.ParamKey import de.pheerai.rcdbquery.dataMappings.internal.RcdbParamOption import de.pheerai.rcdbquery.dataMappings.internal.RelevantForAll -import de.pheerai.rcdbquery.dataMappings.internal.StringGeneratable @Suppress("unused") -enum class Order( +public enum class Order( override val prettyName: String, override val fullName: String, override val paramValue: Long, - override val relevantForAll: Boolean = true + override val relevantForAll: Boolean = true, ) : RcdbParamOption, RelevantForAll { IMAGES("Images", "Amount of Images", 0), @@ -50,7 +49,7 @@ enum class Order( constructor(name: String, paramId: Long) : this(name, name, paramId) - companion object: ParamKey { - override val paramKey = "order" + public companion object : ParamKey { + override val paramKey: String = "order" } } 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..80c2f42 100644 --- a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/order/OrderBuilder.kt +++ b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/order/OrderBuilder.kt @@ -2,7 +2,7 @@ package de.pheerai.rcdbquery.dataMappings.order import de.pheerai.rcdbquery.dataMappings.internal.MultiParamBuilder -class OrderBuilder : MultiParamBuilder() { +public class OrderBuilder : MultiParamBuilder() { override fun add(param: Order): OrderBuilder { super.add(param) return this @@ -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) - fun allRelevant() = this.addAll(Order.values().filter { it.relevantForAll }) + override operator fun Order.invoke(): OrderBuilder = add(this) + public fun allRelevant(): OrderBuilder = 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..6f4148f 100644 --- a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/order/paramBuilder.kt +++ b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/order/paramBuilder.kt @@ -1,8 +1,8 @@ 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 { +public fun ParamsCollector.sortBy(body: OrderBuilder.() -> OrderBuilder): ParamsCollector { val builder = OrderBuilder() builder.body() this[Order.paramKey] = builder.build() diff --git a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/page/Page.kt b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/page/Page.kt index d54ba1b..b686b42 100644 --- a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/page/Page.kt +++ b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/page/Page.kt @@ -3,7 +3,7 @@ package de.pheerai.rcdbquery.dataMappings.page import de.pheerai.rcdbquery.dataMappings.internal.ParamKey import de.pheerai.rcdbquery.dataMappings.internal.RcdbParamOption -class Page(override val paramValue: Long) : +internal class Page(override val paramValue: Long) : RcdbParamOption { override val fullName = "The page to show" override val prettyName = "Page" 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..549dc54 100644 --- a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/page/paramBuilder.kt +++ b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/page/paramBuilder.kt @@ -1,8 +1,8 @@ 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 { +public fun ParamsCollector.page(page: Long): ParamsCollector = also { this[Page.paramKey] = Page(page) } diff --git a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/searchTerm/SearchTerm.kt b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/searchTerm/SearchTerm.kt index 37e4694..13f631f 100644 --- a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/searchTerm/SearchTerm.kt +++ b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/searchTerm/SearchTerm.kt @@ -3,7 +3,7 @@ package de.pheerai.rcdbquery.dataMappings.searchTerm import de.pheerai.rcdbquery.dataMappings.internal.ParamKey import de.pheerai.rcdbquery.dataMappings.internal.RcdbParamOption -class SearchTerm(override val paramValue: String) : +internal class SearchTerm(override val paramValue: String) : RcdbParamOption { override val prettyName = "Search Term" override val fullName = "Search for elements whose name contain this term" 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..3f5622a 100644 --- a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/searchTerm/paramBuilder.kt +++ b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/searchTerm/paramBuilder.kt @@ -1,8 +1,8 @@ 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 { +public fun ParamsCollector.searchTerm(term: String): ParamsCollector = also { it[SearchTerm.paramKey] = listOf( SearchTerm(term) ) diff --git a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/searchType/SearchType.kt b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/searchType/SearchType.kt index 3ef74f4..6b9cc5c 100644 --- a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/searchType/SearchType.kt +++ b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/searchType/SearchType.kt @@ -4,7 +4,7 @@ import de.pheerai.rcdbquery.dataMappings.internal.ParamKey import de.pheerai.rcdbquery.dataMappings.internal.RcdbParamOption @Suppress("unused") -enum class SearchType( +public enum class SearchType( override val prettyName: String, override val fullName: String, override val paramValue: Long @@ -15,7 +15,7 @@ enum class SearchType( PERSON("Person", "Search for a person (designer, engineer,...)", 13) ; - companion object: ParamKey { - override val paramKey = "ot" + public companion object: ParamKey { + override val paramKey: String = "ot" } } 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..b746eff 100644 --- a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/searchType/paramBuilder.kt +++ b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/searchType/paramBuilder.kt @@ -1,7 +1,7 @@ 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 { +public fun ParamsCollector.searchType(searchType: SearchType): ParamsCollector = also { it[SearchType.paramKey] = searchType } diff --git a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/startsWith/StartsWith.kt b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/startsWith/StartsWith.kt index 42eb629..ba2382c 100644 --- a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/startsWith/StartsWith.kt +++ b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/startsWith/StartsWith.kt @@ -5,7 +5,7 @@ package de.pheerai.rcdbquery.dataMappings.startsWith import de.pheerai.rcdbquery.dataMappings.internal.ParamKey import de.pheerai.rcdbquery.dataMappings.internal.RcdbParamOption -class StartsWith(override val paramValue: String) : +internal class StartsWith(override val paramValue: String) : RcdbParamOption { override val prettyName = "Starts with" override val fullName = "Name starting with term" 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..8a54fbb 100644 --- a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/startsWith/paramBuilder.kt +++ b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/startsWith/paramBuilder.kt @@ -1,8 +1,8 @@ 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 { +public fun ParamsCollector.startsWith(term: String): ParamsCollector = also { this[StartsWith.paramKey] = StartsWith(term) } diff --git a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/status/Status.kt b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/status/Status.kt index 8462287..38b889a 100644 --- a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/status/Status.kt +++ b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/status/Status.kt @@ -4,7 +4,7 @@ import de.pheerai.rcdbquery.dataMappings.internal.RcdbParamOption import de.pheerai.rcdbquery.dataMappings.internal.StringGeneratable @Suppress("unused") -enum class Status( +public enum class Status( override val prettyName: String, override val fullName: String, override val paramValue: Long @@ -18,10 +18,10 @@ enum class Status( constructor(name: String, paramId: Long) : this(name, name, paramId) - companion object: StringGeneratable { - override val paramKey = "st" + public companion object: StringGeneratable { + override val paramKey: String = "st" - override fun of(input: String) = when (input) { + override fun of(input: String): Status? = when (input) { "SBNO" -> SBNO "Operating" -> OPERATING "Under Construction" -> UNDER_CONSTRUCTION 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..41092b1 100644 --- a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/status/StatusBuilder.kt +++ b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/status/StatusBuilder.kt @@ -2,14 +2,11 @@ package de.pheerai.rcdbquery.dataMappings.status import de.pheerai.rcdbquery.dataMappings.internal.MultiParamBuilder -class StatusBuilder : MultiParamBuilder() { +public class StatusBuilder : MultiParamBuilder() { override fun add(param: Status): StatusBuilder { super.add(param) 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(): StatusBuilder = 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..4f84396 100644 --- a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/status/paramBuilder.kt +++ b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/status/paramBuilder.kt @@ -1,8 +1,8 @@ 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 { +public fun ParamsCollector.status(body: StatusBuilder.() -> StatusBuilder): ParamsCollector { val builder = StatusBuilder() builder.body() this[Status.paramKey] = builder.build() diff --git a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/thrill/Thrill.kt b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/thrill/Thrill.kt index 940ec2b..4816970 100644 --- a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/thrill/Thrill.kt +++ b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/thrill/Thrill.kt @@ -3,7 +3,7 @@ package de.pheerai.rcdbquery.dataMappings.thrill import de.pheerai.rcdbquery.dataMappings.internal.RcdbParamOption import de.pheerai.rcdbquery.dataMappings.internal.StringGeneratable -enum class Thrill( +public enum class Thrill( override val prettyName: String, override val fullName: String, override val paramValue: Long @@ -16,8 +16,8 @@ enum class Thrill( constructor(name: String, paramValue: Long) : this(name, name, paramValue) - companion object : StringGeneratable { - override val paramKey = "sc" + public companion object : StringGeneratable { + override val paramKey: String = "sc" override fun of(input: String): Thrill? = when (input) { "Kiddie" -> KIDDIE 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..410a5c9 100644 --- a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/thrill/ThrillBuilder.kt +++ b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/thrill/ThrillBuilder.kt @@ -2,14 +2,11 @@ package de.pheerai.rcdbquery.dataMappings.thrill import de.pheerai.rcdbquery.dataMappings.internal.MultiParamBuilder -class ThrillBuilder : MultiParamBuilder() { +public class ThrillBuilder : MultiParamBuilder() { override fun add(param: Thrill): ThrillBuilder { super.add(param) 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(): ThrillBuilder = 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..b661332 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 { +public 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/Type.kt b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/type/Type.kt index 620c801..0df1514 100644 --- a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/type/Type.kt +++ b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/type/Type.kt @@ -3,7 +3,7 @@ package de.pheerai.rcdbquery.dataMappings.type import de.pheerai.rcdbquery.dataMappings.internal.RcdbParamOption import de.pheerai.rcdbquery.dataMappings.internal.StringGeneratable -enum class Type( +public enum class Type( override val prettyName: String, override val fullName: String, override val paramValue: Long @@ -14,10 +14,10 @@ enum class Type( constructor(name: String, paramValue: Long): this(name, name, paramValue) - companion object: StringGeneratable { - override val paramKey = "ty" + public companion object: StringGeneratable { + override val paramKey: String = "ty" - override fun of(input: String) = when(input) { + override fun of(input: String): Type? = when(input) { "Steel" -> STEEL "Wood" -> WOOD else -> null 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..c531135 100644 --- a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/type/TypeBuilder.kt +++ b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/type/TypeBuilder.kt @@ -2,12 +2,11 @@ package de.pheerai.rcdbquery.dataMappings.type import de.pheerai.rcdbquery.dataMappings.internal.MultiParamBuilder -class TypeBuilder : MultiParamBuilder() { +public class TypeBuilder : MultiParamBuilder() { override fun add(param: Type): TypeBuilder { super.add(param) return this } - fun steel() = this.add(Type.STEEL) - fun wood() = this.add(Type.WOOD) + override fun Type.invoke(): TypeBuilder = 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..f0d9ebe 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() +public 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..b421da3 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 + +public const val EXTRA_COLUMNS_ERROR_MESSAGE: String = + "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)") +public fun ParamsCollector.extraColumns(orders: List): Nothing = + 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)") +public fun ParamsCollector.extraColumns(vararg orders: Order): Nothing = + 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..6e35f90 100644 --- a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/vendor/Vendor.kt +++ b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/vendor/Vendor.kt @@ -5,10 +5,10 @@ import de.pheerai.rcdbquery.dataMappings.internal.RcdbParamOption import de.pheerai.rcdbquery.dataMappings.internal.StringGeneratable @Suppress("unused") -enum class Vendor( +public 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), @@ -249,15 +249,18 @@ enum class Vendor( constructor(name: String, paramId: Long) : this(name, name, paramId) - companion object : StringGeneratable { - override val paramKey = "mk" - override fun of(input: String) = values().find { input == it.fullName } + public companion object : StringGeneratable { + override val paramKey: String = "mk" + override fun of(input: String): Vendor? = values().find { input == it.fullName } - fun searchByName(name: String): List { + public 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..d204798 100644 --- a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/vendor/VendorBuilder.kt +++ b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/vendor/VendorBuilder.kt @@ -2,16 +2,11 @@ package de.pheerai.rcdbquery.dataMappings.vendor import de.pheerai.rcdbquery.dataMappings.internal.MultiParamBuilder -class VendorBuilder : MultiParamBuilder() { +public class VendorBuilder : MultiParamBuilder() { 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) + override operator fun Vendor.invoke(): VendorBuilder = 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..bfc787d 100644 --- a/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/vendor/paramBuilder.kt +++ b/src/main/kotlin/de/pheerai/rcdbquery/dataMappings/vendor/paramBuilder.kt @@ -1,9 +1,9 @@ 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 { +public fun ParamsCollector.vendors(body: VendorBuilder.() -> VendorBuilder): ParamsCollector { val builder = VendorBuilder() builder.body() this[Vendor.paramKey] = builder.build() 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..63fdeab --- /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 + +public class ParamsCollector { + private val multiParams: MutableMap>> = mutableMapOf() + private val singleParams: MutableMap> = mutableMapOf() + + public fun build(): RcdbParams = 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) } + + public operator fun set(paramName: String, options: List>) { + this.multiParams[paramName] = options + } + + public 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.") + } + } + + public fun getSingle(paramName: String): Any? = this.multiParams[paramName] ?: this.singleParams[paramName] + public fun getMulti(paramName: String): List>? = this.multiParams[paramName] + + public fun keys(): Set = 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..c8ea78a --- /dev/null +++ b/src/main/kotlin/de/pheerai/rcdbquery/dsl/params/Params.kt @@ -0,0 +1,8 @@ +package de.pheerai.rcdbquery.dsl.params + +public sealed class BaseParams { + public abstract val params: Map +} + +public class MultiParams(override val params: Map>) : BaseParams>() +public 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..f832174 --- /dev/null +++ b/src/main/kotlin/de/pheerai/rcdbquery/dsl/params/exceptions.kt @@ -0,0 +1,3 @@ +package de.pheerai.rcdbquery.dsl.params + +internal 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..d85f6c1 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 +import de.pheerai.rcdbquery.dsl.params.MultiParams +import de.pheerai.rcdbquery.dsl.params.ParamsCollector +import de.pheerai.rcdbquery.dsl.params.SingleParams -// TODO: Restructure - -data class RcdbParams( - val multiParams: MultiParams, - val singleParams: SingleParams +public data class RcdbParams( + private val multiParams: MultiParams, + private val singleParams: SingleParams, ) { - fun toStrings(): List { + public 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,62 +24,10 @@ 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) = +public fun rcdbQuery(body: ParamsCollector.() -> ParamsCollector): String = RcdbUrlQuery("https://www.rcdb.com/r.htm?", rcdbQueryParams(body)).toString() -data class RcdbUrlQuery(val baseUrl: String, val params: RcdbParams) { +private data class RcdbUrlQuery(val baseUrl: String, val params: RcdbParams) { override fun toString(): String { return params.toStrings() .joinToString(prefix = baseUrl, separator = "&") @@ -87,9 +35,9 @@ data class RcdbUrlQuery(val baseUrl: String, val params: RcdbParams) { } /** - * Builder for the parameters only (mainly because it might be possilbe in the future to have an API with a POST search object? + * Builder for the parameters only (mainly because it might be possible in the future to have an API with a POST search object? */ -fun rcdbQueryParams(body: ParamsCollector.() -> ParamsCollector): RcdbParams { +private fun rcdbQueryParams(body: ParamsCollector.() -> ParamsCollector): RcdbParams { val builder = ParamsCollector() builder.body() return builder.build() diff --git a/src/main/kotlin/module-info.java b/src/main/kotlin/module-info.java index 4025e2e..fe982a7 100644 --- a/src/main/kotlin/module-info.java +++ b/src/main/kotlin/module-info.java @@ -1,6 +1,7 @@ module rcdbquery.main { exports de.pheerai.rcdbquery.dataMappings.category; exports de.pheerai.rcdbquery.dataMappings.classification; + exports de.pheerai.rcdbquery.dataMappings; exports de.pheerai.rcdbquery.dataMappings.design; exports de.pheerai.rcdbquery.dataMappings.layout; exports de.pheerai.rcdbquery.dataMappings.order; @@ -13,6 +14,8 @@ module rcdbquery.main { exports de.pheerai.rcdbquery.dataMappings.type; exports de.pheerai.rcdbquery.dataMappings.vendor; exports de.pheerai.rcdbquery.dsl; + exports de.pheerai.rcdbquery.dsl.params; requires kotlin.stdlib; + requires java.base; } 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..b20ef87 --- /dev/null +++ b/src/test/kotlin/de/pheerai/rcdbquery/TestConfig.kt @@ -0,0 +1,10 @@ +package de.pheerai.rcdbquery + +import io.kotest.core.config.AbstractProjectConfig + +class TestConfig : AbstractProjectConfig() { + override val globalAssertSoftly = true +} + +// Just for IJ to stop whining about unused classes +annotation class Spec() diff --git a/src/test/kotlin/de/pheerai/rcdbquery/dsl/RcdbQueryDslTest.kt b/src/test/kotlin/de/pheerai/rcdbquery/dsl/RcdbQueryDslTest.kt index af911c3..e79449d 100644 --- a/src/test/kotlin/de/pheerai/rcdbquery/dsl/RcdbQueryDslTest.kt +++ b/src/test/kotlin/de/pheerai/rcdbquery/dsl/RcdbQueryDslTest.kt @@ -1,38 +1,58 @@ package de.pheerai.rcdbquery.dsl -import de.pheerai.rcdbquery.dataMappings.vendor.Vendor +import de.pheerai.rcdbquery.Spec +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.assertions.throwables.shouldThrow import io.kotest.core.spec.style.StringSpec -import io.kotest.matchers.shouldBe import io.kotest.matchers.string.shouldContain +import io.kotest.matchers.string.shouldHaveLength +@Spec 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" { + shouldThrow { + 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 } }) -