From 63645f7cf487a3e91202bc97dd1305b58bd9fd75 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Mon, 3 Jun 2024 17:58:31 -0700 Subject: [PATCH 1/2] Bumped Gradle to version 8.8 --- ...uvin_erik_isgd_shorten_1_0_2_SNAPSHOT.xml} | 6 +-- ...ik_urlencoder_urlencoder_lib_jvm_1_4_0.xml | 12 ----- ...ik_urlencoder_urlencoder_lib_jvm_1_5_0.xml | 10 ++++ ..._jetbrains_kotlin_kotlin_stdlib_1_9_20.xml | 12 ----- ...g_jetbrains_kotlin_kotlin_stdlib_2_0_0.xml | 14 ++++++ ...ins_kotlin_kotlin_stdlib_common_1_9_10.xml | 12 ----- ...rains_kotlin_kotlin_stdlib_jdk7_1_9_10.xml | 10 ---- ...rains_kotlin_kotlin_stdlib_jdk8_1_9_10.xml | 10 ---- .../modules/isgd-shorten-examples-gradle.iml | 12 +++++ .../isgd-shorten-examples-gradle.main.iml | 49 +++++++++++++++++++ .../isgd-shorten-examples-gradle.test.iml | 49 +++++++++++++++++++ .../gradle/wrapper/gradle-wrapper.properties | 2 +- examples/gradle/gradlew | 2 +- .../erik/isgd/{Config.kt => ShortenConfig.kt} | 5 +- 14 files changed, 141 insertions(+), 64 deletions(-) rename examples/gradle/.idea/libraries/{Gradle__net_thauvin_erik_isgd_shorten_1_0_0.xml => Gradle__net_thauvin_erik_isgd_shorten_1_0_2_SNAPSHOT.xml} (53%) delete mode 100644 examples/gradle/.idea/libraries/Gradle__net_thauvin_erik_urlencoder_urlencoder_lib_jvm_1_4_0.xml create mode 100644 examples/gradle/.idea/libraries/Gradle__net_thauvin_erik_urlencoder_urlencoder_lib_jvm_1_5_0.xml delete mode 100644 examples/gradle/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_1_9_20.xml create mode 100644 examples/gradle/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_2_0_0.xml delete mode 100644 examples/gradle/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_common_1_9_10.xml delete mode 100644 examples/gradle/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_jdk7_1_9_10.xml delete mode 100644 examples/gradle/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_jdk8_1_9_10.xml create mode 100644 examples/gradle/.idea/modules/isgd-shorten-examples-gradle.iml create mode 100644 examples/gradle/.idea/modules/isgd-shorten-examples-gradle.main.iml create mode 100644 examples/gradle/.idea/modules/isgd-shorten-examples-gradle.test.iml rename src/main/kotlin/net/thauvin/erik/isgd/{Config.kt => ShortenConfig.kt} (98%) diff --git a/examples/gradle/.idea/libraries/Gradle__net_thauvin_erik_isgd_shorten_1_0_0.xml b/examples/gradle/.idea/libraries/Gradle__net_thauvin_erik_isgd_shorten_1_0_2_SNAPSHOT.xml similarity index 53% rename from examples/gradle/.idea/libraries/Gradle__net_thauvin_erik_isgd_shorten_1_0_0.xml rename to examples/gradle/.idea/libraries/Gradle__net_thauvin_erik_isgd_shorten_1_0_2_SNAPSHOT.xml index 166b7bb..21fabac 100644 --- a/examples/gradle/.idea/libraries/Gradle__net_thauvin_erik_isgd_shorten_1_0_0.xml +++ b/examples/gradle/.idea/libraries/Gradle__net_thauvin_erik_isgd_shorten_1_0_2_SNAPSHOT.xml @@ -1,8 +1,8 @@ - - + + - + diff --git a/examples/gradle/.idea/libraries/Gradle__net_thauvin_erik_urlencoder_urlencoder_lib_jvm_1_4_0.xml b/examples/gradle/.idea/libraries/Gradle__net_thauvin_erik_urlencoder_urlencoder_lib_jvm_1_4_0.xml deleted file mode 100644 index 1e47317..0000000 --- a/examples/gradle/.idea/libraries/Gradle__net_thauvin_erik_urlencoder_urlencoder_lib_jvm_1_4_0.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - \ No newline at end of file diff --git a/examples/gradle/.idea/libraries/Gradle__net_thauvin_erik_urlencoder_urlencoder_lib_jvm_1_5_0.xml b/examples/gradle/.idea/libraries/Gradle__net_thauvin_erik_urlencoder_urlencoder_lib_jvm_1_5_0.xml new file mode 100644 index 0000000..0f566e1 --- /dev/null +++ b/examples/gradle/.idea/libraries/Gradle__net_thauvin_erik_urlencoder_urlencoder_lib_jvm_1_5_0.xml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/examples/gradle/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_1_9_20.xml b/examples/gradle/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_1_9_20.xml deleted file mode 100644 index 034b1dc..0000000 --- a/examples/gradle/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_1_9_20.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - \ No newline at end of file diff --git a/examples/gradle/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_2_0_0.xml b/examples/gradle/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_2_0_0.xml new file mode 100644 index 0000000..b6bfc35 --- /dev/null +++ b/examples/gradle/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_2_0_0.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/examples/gradle/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_common_1_9_10.xml b/examples/gradle/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_common_1_9_10.xml deleted file mode 100644 index 79b2f47..0000000 --- a/examples/gradle/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_common_1_9_10.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - \ No newline at end of file diff --git a/examples/gradle/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_jdk7_1_9_10.xml b/examples/gradle/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_jdk7_1_9_10.xml deleted file mode 100644 index 9b4e583..0000000 --- a/examples/gradle/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_jdk7_1_9_10.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/examples/gradle/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_jdk8_1_9_10.xml b/examples/gradle/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_jdk8_1_9_10.xml deleted file mode 100644 index acbd821..0000000 --- a/examples/gradle/.idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_jdk8_1_9_10.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/examples/gradle/.idea/modules/isgd-shorten-examples-gradle.iml b/examples/gradle/.idea/modules/isgd-shorten-examples-gradle.iml new file mode 100644 index 0000000..5fe3c00 --- /dev/null +++ b/examples/gradle/.idea/modules/isgd-shorten-examples-gradle.iml @@ -0,0 +1,12 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/examples/gradle/.idea/modules/isgd-shorten-examples-gradle.main.iml b/examples/gradle/.idea/modules/isgd-shorten-examples-gradle.main.iml new file mode 100644 index 0000000..d05ab4c --- /dev/null +++ b/examples/gradle/.idea/modules/isgd-shorten-examples-gradle.main.iml @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + $USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-scripting-jvm/2.0.0/11209b97b2495fb3755f2e2e4fb64abb7cd9b4c0/kotlin-scripting-jvm-2.0.0.jar + $USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-scripting-common/2.0.0/f90871227cdcd06fd4fecb086fa03e7fa375bae3/kotlin-scripting-common-2.0.0.jar + $USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib/2.0.0/b48df2c4aede9586cc931ead433bc02d6fd7879e/kotlin-stdlib-2.0.0.jar + $USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains/annotations/13.0/919f0dfe192fb4e063e7dacadee7f8bb9a2672a9/annotations-13.0.jar + $USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-script-runtime/2.0.0/fdc27dd047d592fa41d2dfa21e7621287a361612/kotlin-script-runtime-2.0.0.jar + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/examples/gradle/.idea/modules/isgd-shorten-examples-gradle.test.iml b/examples/gradle/.idea/modules/isgd-shorten-examples-gradle.test.iml new file mode 100644 index 0000000..4728540 --- /dev/null +++ b/examples/gradle/.idea/modules/isgd-shorten-examples-gradle.test.iml @@ -0,0 +1,49 @@ + + + + + + isgd-shorten-examples-gradle:main + + + + + + + + + + + + + + + + + $USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-scripting-jvm/2.0.0/11209b97b2495fb3755f2e2e4fb64abb7cd9b4c0/kotlin-scripting-jvm-2.0.0.jar + $USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-scripting-common/2.0.0/f90871227cdcd06fd4fecb086fa03e7fa375bae3/kotlin-scripting-common-2.0.0.jar + $USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-stdlib/2.0.0/b48df2c4aede9586cc931ead433bc02d6fd7879e/kotlin-stdlib-2.0.0.jar + $USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains/annotations/13.0/919f0dfe192fb4e063e7dacadee7f8bb9a2672a9/annotations-13.0.jar + $USER_HOME$/.gradle/caches/modules-2/files-2.1/org.jetbrains.kotlin/kotlin-script-runtime/2.0.0/fdc27dd047d592fa41d2dfa21e7621287a361612/kotlin-script-runtime-2.0.0.jar + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/examples/gradle/gradle/wrapper/gradle-wrapper.properties b/examples/gradle/gradle/wrapper/gradle-wrapper.properties index b82aa23..a441313 100644 --- a/examples/gradle/gradle/wrapper/gradle-wrapper.properties +++ b/examples/gradle/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/examples/gradle/gradlew b/examples/gradle/gradlew index 1aa94a4..b740cf1 100755 --- a/examples/gradle/gradlew +++ b/examples/gradle/gradlew @@ -55,7 +55,7 @@ # Darwin, MinGW, and NonStop. # # (3) This script is generated from the Groovy template -# https://github.com/gradle/gradle/blob/HEAD/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt # within the Gradle project. # # You can find Gradle at https://github.com/gradle/gradle/. diff --git a/src/main/kotlin/net/thauvin/erik/isgd/Config.kt b/src/main/kotlin/net/thauvin/erik/isgd/ShortenConfig.kt similarity index 98% rename from src/main/kotlin/net/thauvin/erik/isgd/Config.kt rename to src/main/kotlin/net/thauvin/erik/isgd/ShortenConfig.kt index fbf5209..83b4589 100644 --- a/src/main/kotlin/net/thauvin/erik/isgd/Config.kt +++ b/src/main/kotlin/net/thauvin/erik/isgd/ShortenConfig.kt @@ -48,14 +48,13 @@ class Config private constructor(builder: Builder) { * See the [is.gd Shortening](https://is.gd/apishorteningreference.php) or * [is.gd Lookup](https://is.gd/apilookupreference.php) APIs. */ - data class Builder( - var url: String = "", + data class Builder(var url: String) { var shorturl: String = "", var callback: String = "", var logstats: Boolean = false, var format: Format = Format.SIMPLE, var isVgd: Boolean = false - ) { + /** * The url parameter is the address that you want to shorten. */ From e20934fc08b7b2fc6713a89da21b773214fad553 Mon Sep 17 00:00:00 2001 From: "Erik C. Thauvin" Date: Mon, 3 Jun 2024 17:59:57 -0700 Subject: [PATCH 2/2] Added ShortenConfig && LookupConfig --- README.md | 11 ++- .../src/main/java/com/example/IsgdSample.java | 4 +- examples/gradle/.idea/gradle.xml | 2 +- examples/gradle/.idea/kotlinc.xml | 2 +- ...Gradle__org_jetbrains_annotations_13_0.xml | 8 +- examples/gradle/.idea/misc.xml | 2 +- examples/gradle/.idea/modules.xml | 6 +- .../gradle/.idea/modules/isgd-examples.iml | 12 --- .../.idea/modules/isgd-examples.main.iml | 53 ------------ .../.idea/modules/isgd-examples.test.iml | 53 ------------ .../src/main/java/com/example/IsgdSample.java | 4 +- src/main/kotlin/net/thauvin/erik/isgd/Isgd.kt | 11 +-- .../net/thauvin/erik/isgd/LookupConfig.kt | 84 +++++++++++++++++++ .../net/thauvin/erik/isgd/ShortenConfig.kt | 25 +++--- .../kotlin/net/thauvin/erik/isgd/IsgdTest.kt | 32 +++---- 15 files changed, 138 insertions(+), 171 deletions(-) delete mode 100644 examples/gradle/.idea/modules/isgd-examples.iml delete mode 100644 examples/gradle/.idea/modules/isgd-examples.main.iml delete mode 100644 examples/gradle/.idea/modules/isgd-examples.test.iml create mode 100644 src/main/kotlin/net/thauvin/erik/isgd/LookupConfig.kt diff --git a/README.md b/README.md index 504f627..8d7da7d 100644 --- a/README.md +++ b/README.md @@ -94,11 +94,10 @@ Instructions for using with Maven, Ivy, etc. can be found on [Maven Central](htt To make it easier to use the library with Java, configuration builders are available: ```java -var config = new Config.Builder() - .url("https://www.example.com/") - .shortUrl("foobar") +var config = new ShortenConfig.Builder("https://www.example.com/") + .shorturl("foobar") .callback("test") - .logStats(true) + .logstats(true) .format(Format.JSON) .build(); @@ -106,8 +105,8 @@ Isgd.shorten(config); ``` ```java -var config = new Config.Builder() - .shortUrl("https://is.gd/Pt2sET") +var config = new LookupConfig.Builder("https://is.gd/Pt2sET") + .callback("test") .format(Format.XML) .build(); diff --git a/examples/bld/src/main/java/com/example/IsgdSample.java b/examples/bld/src/main/java/com/example/IsgdSample.java index b79d095..ed0d774 100644 --- a/examples/bld/src/main/java/com/example/IsgdSample.java +++ b/examples/bld/src/main/java/com/example/IsgdSample.java @@ -1,9 +1,9 @@ package com.example; -import net.thauvin.erik.isgd.Config; import net.thauvin.erik.isgd.Format; import net.thauvin.erik.isgd.Isgd; import net.thauvin.erik.isgd.IsgdException; +import net.thauvin.erik.isgd.LookupConfig; public final class IsgdSample { public static void main(final String[] args) { @@ -12,7 +12,7 @@ public final class IsgdSample { try { if (arg.contains("is.gd")) { System.out.println(arg + " <-- " + Isgd.lookup(arg)); - System.out.print(Isgd.lookup(new Config.Builder().shortUrl(arg).format(Format.WEB).build())); + System.out.print(Isgd.lookup(new LookupConfig.Builder(arg).format(Format.WEB).build())); } else { System.out.println(arg + " --> " + Isgd.shorten(arg)); } diff --git a/examples/gradle/.idea/gradle.xml b/examples/gradle/.idea/gradle.xml index 7d3b3e8..f2c1963 100644 --- a/examples/gradle/.idea/gradle.xml +++ b/examples/gradle/.idea/gradle.xml @@ -5,7 +5,7 @@ \ No newline at end of file diff --git a/examples/gradle/.idea/misc.xml b/examples/gradle/.idea/misc.xml index 2b2ce21..aac3519 100644 --- a/examples/gradle/.idea/misc.xml +++ b/examples/gradle/.idea/misc.xml @@ -3,5 +3,5 @@ - + \ No newline at end of file diff --git a/examples/gradle/.idea/modules.xml b/examples/gradle/.idea/modules.xml index c982859..2ec1f70 100644 --- a/examples/gradle/.idea/modules.xml +++ b/examples/gradle/.idea/modules.xml @@ -2,9 +2,9 @@ - - - + + + \ No newline at end of file diff --git a/examples/gradle/.idea/modules/isgd-examples.iml b/examples/gradle/.idea/modules/isgd-examples.iml deleted file mode 100644 index 89a0841..0000000 --- a/examples/gradle/.idea/modules/isgd-examples.iml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - \ No newline at end of file diff --git a/examples/gradle/.idea/modules/isgd-examples.main.iml b/examples/gradle/.idea/modules/isgd-examples.main.iml deleted file mode 100644 index ced4435..0000000 --- a/examples/gradle/.idea/modules/isgd-examples.main.iml +++ /dev/null @@ -1,53 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - $MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-scripting-jvm/1.9.20/kotlin-scripting-jvm-1.9.20.jar - $MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-scripting-common/1.9.20/kotlin-scripting-common-1.9.20.jar - $MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-stdlib/1.9.20/kotlin-stdlib-1.9.20.jar - $MAVEN_REPOSITORY$/org/jetbrains/annotations/13.0/annotations-13.0.jar - $MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-script-runtime/1.9.20/kotlin-script-runtime-1.9.20.jar - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/examples/gradle/.idea/modules/isgd-examples.test.iml b/examples/gradle/.idea/modules/isgd-examples.test.iml deleted file mode 100644 index b2cce05..0000000 --- a/examples/gradle/.idea/modules/isgd-examples.test.iml +++ /dev/null @@ -1,53 +0,0 @@ - - - - - - isgd-examples:main - - - - - - - - - - - - - - - - - - $MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-scripting-jvm/1.9.20/kotlin-scripting-jvm-1.9.20.jar - $MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-scripting-common/1.9.20/kotlin-scripting-common-1.9.20.jar - $MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-stdlib/1.9.20/kotlin-stdlib-1.9.20.jar - $MAVEN_REPOSITORY$/org/jetbrains/annotations/13.0/annotations-13.0.jar - $MAVEN_REPOSITORY$/org/jetbrains/kotlin/kotlin-script-runtime/1.9.20/kotlin-script-runtime-1.9.20.jar - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/examples/gradle/src/main/java/com/example/IsgdSample.java b/examples/gradle/src/main/java/com/example/IsgdSample.java index b79d095..ed0d774 100644 --- a/examples/gradle/src/main/java/com/example/IsgdSample.java +++ b/examples/gradle/src/main/java/com/example/IsgdSample.java @@ -1,9 +1,9 @@ package com.example; -import net.thauvin.erik.isgd.Config; import net.thauvin.erik.isgd.Format; import net.thauvin.erik.isgd.Isgd; import net.thauvin.erik.isgd.IsgdException; +import net.thauvin.erik.isgd.LookupConfig; public final class IsgdSample { public static void main(final String[] args) { @@ -12,7 +12,7 @@ public final class IsgdSample { try { if (arg.contains("is.gd")) { System.out.println(arg + " <-- " + Isgd.lookup(arg)); - System.out.print(Isgd.lookup(new Config.Builder().shortUrl(arg).format(Format.WEB).build())); + System.out.print(Isgd.lookup(new LookupConfig.Builder(arg).format(Format.WEB).build())); } else { System.out.println(arg + " --> " + Isgd.shorten(arg)); } diff --git a/src/main/kotlin/net/thauvin/erik/isgd/Isgd.kt b/src/main/kotlin/net/thauvin/erik/isgd/Isgd.kt index 756eb3f..2575d04 100644 --- a/src/main/kotlin/net/thauvin/erik/isgd/Isgd.kt +++ b/src/main/kotlin/net/thauvin/erik/isgd/Isgd.kt @@ -75,7 +75,7 @@ class Isgd private constructor() { */ @JvmStatic @Throws(IsgdException::class) - fun lookup(config: Config): String { + fun lookup(config: LookupConfig): String { return lookup( config.shorturl, config.callback, @@ -89,9 +89,10 @@ class Isgd private constructor() { * * See the [is.gd API](https://is.gd/apilookupreference.php). * - * @param The shorturl parameter is the shortened is.gd URL that you want to look up. You can either submit the - * full address (e.g. https://is.gd/example) or only the unique part (e.g. example). The address you submit - * should be properly formed; the API lookup function is not guaranteed to handle malformed URLs the same way as when you visit them manually. + * @param shorturl The shorturl parameter is the shortened is.gd URL that you want to look up. You can either + * submit the full address (e.g. `https://is.gd/example`) or only the unique part (e.g. `example`). The address + * you submit should be properly formed; the API lookup function is not guaranteed to handle malformed URLs the + * same way as when you visit them manually. * @param callback The callback parameter is used to specify a callback function to wrap the returned data in * when using JSON format. This can be useful when working with cross domain data. Even when using JSON format * this parameter is optional. @@ -128,7 +129,7 @@ class Isgd private constructor() { */ @JvmStatic @Throws(IsgdException::class) - fun shorten(config: Config): String { + fun shorten(config: ShortenConfig): String { return shorten( config.url, config.shorturl, diff --git a/src/main/kotlin/net/thauvin/erik/isgd/LookupConfig.kt b/src/main/kotlin/net/thauvin/erik/isgd/LookupConfig.kt new file mode 100644 index 0000000..9f8d285 --- /dev/null +++ b/src/main/kotlin/net/thauvin/erik/isgd/LookupConfig.kt @@ -0,0 +1,84 @@ +/* + * LookupConfig.kt + * + * Copyright 2020-2024 Erik C. Thauvin (erik@thauvin.net) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * + * Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * + * Neither the name of this project nor the names of its contributors may be + * used to endorse or promote products derived from this software without + * specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +package net.thauvin.erik.isgd + +/** + * Provides a builder to lookup an is.gd shortlink. + */ +class LookupConfig private constructor(builder: Builder) { + val shorturl: String = builder.shorturl + val callback: String = builder.callback + val format: Format = builder.format + val isVgd: Boolean = builder.isVgd + + /** + * Configures the parameters to lookup an is.gd shortlink. + * + * See the [is.gd Lookup]() API. + */ + data class Builder(var shorturl: String) { + var callback: String = "" + var format: Format = Format.SIMPLE + var isVgd: Boolean = false + + /** + * The shorturl parameter is the shortened is.gd URL that you want to look up. You can either submit the full + * address (e.g. `https://is.gd/example`) or only the unique part (e.g. `example`). The address you submit + * should be properly formed; the API lookup function is not guaranteed to handle malformed URLs the same way + * as when you visit them manually. + */ + fun shorturl(shorturl: String): Builder = apply { this.shorturl = shorturl } + + /** + * The callback parameter is used to specify a callback function to wrap the returned data in + * when using JSON format. This can be useful when working with cross domain data. Even when using JSON format + * this parameter is optional. + */ + fun callback(callback: String): Builder = apply { this.callback = callback } + + /** + * The format parameter determines what format is.gd uses to send output back to you (e.g. to + * tell you what your new shortened URL is or if an error has occurred). + */ + fun format(format: Format): Builder = apply { this.format = format } + + /** + * Shorten using the `v.gd` domain. + */ + fun isVgd(isVgd: Boolean): Builder = apply { this.isVgd = isVgd } + + /** + * Builds a new configuration. + */ + fun build() = LookupConfig(this) + } +} diff --git a/src/main/kotlin/net/thauvin/erik/isgd/ShortenConfig.kt b/src/main/kotlin/net/thauvin/erik/isgd/ShortenConfig.kt index 83b4589..c4a9d9e 100644 --- a/src/main/kotlin/net/thauvin/erik/isgd/ShortenConfig.kt +++ b/src/main/kotlin/net/thauvin/erik/isgd/ShortenConfig.kt @@ -1,5 +1,5 @@ /* - * Config.kt + * ShortenConfig.kt * * Copyright 2020-2024 Erik C. Thauvin (erik@thauvin.net) * @@ -32,9 +32,9 @@ package net.thauvin.erik.isgd /** - * Provides a builder to create/lookup an is.gd shortlink. + * Provides a builder to create an is.gd shortlink. */ -class Config private constructor(builder: Builder) { +class ShortenConfig private constructor(builder: Builder) { val url: String = builder.url val shorturl: String = builder.shorturl val callback: String = builder.callback @@ -43,16 +43,15 @@ class Config private constructor(builder: Builder) { val isVgd: Boolean = builder.isVgd /** - * Configures the parameters to create/lookup an is.gd shortlink. + * Configures the parameters to create an is.gd shortlink. * - * See the [is.gd Shortening](https://is.gd/apishorteningreference.php) or - * [is.gd Lookup](https://is.gd/apilookupreference.php) APIs. + * See the [is.gd Shortening](https://is.gd/apishorteningreference.php) API. */ data class Builder(var url: String) { - var shorturl: String = "", - var callback: String = "", - var logstats: Boolean = false, - var format: Format = Format.SIMPLE, + var shorturl: String = "" + var callback: String = "" + var logstats: Boolean = false + var format: Format = Format.SIMPLE var isVgd: Boolean = false /** @@ -67,7 +66,7 @@ class Config private constructor(builder: Builder) { * short URL might already be taken (this is very often the case with common words) so if you're using this * option be prepared to respond to an error and get an alternative choice from your app's user. */ - fun shortUrl(shortUrl: String): Builder = apply { this.shorturl = shortUrl } + fun shorturl(shorturl: String): Builder = apply { this.shorturl = shorturl } /** * The callback parameter is used to specify a callback function to wrap the returned data in @@ -85,7 +84,7 @@ class Config private constructor(builder: Builder) { * parameter out of your API call if you don't require statistics on usage. See the * [usage limits page](https://is.gd/usagelimits.php) for more information on this. */ - fun logStats(logStats: Boolean): Builder = apply { this.logstats = logStats } + fun logstats(logstats: Boolean): Builder = apply { this.logstats = logstats } /** * The format parameter determines what format is.gd uses to send output back to you (e.g. to @@ -101,6 +100,6 @@ class Config private constructor(builder: Builder) { /** * Builds a new configuration. */ - fun build() = Config(this) + fun build() = ShortenConfig(this) } } diff --git a/src/test/kotlin/net/thauvin/erik/isgd/IsgdTest.kt b/src/test/kotlin/net/thauvin/erik/isgd/IsgdTest.kt index 0e68ec2..1139351 100644 --- a/src/test/kotlin/net/thauvin/erik/isgd/IsgdTest.kt +++ b/src/test/kotlin/net/thauvin/erik/isgd/IsgdTest.kt @@ -66,7 +66,7 @@ class IsgdTest { assertFailsWith( message = "shorten(config:duplicate)", exceptionClass = IsgdException::class, - block = { Isgd.shorten(Config.Builder().url(shortUrl).build()) } + block = { Isgd.shorten(ShortenConfig.Builder(shortUrl).build()) } ) } @@ -84,7 +84,7 @@ class IsgdTest { assertFailsWith( message = "lookup(config:empty)", exceptionClass = IllegalArgumentException::class, - block = { Isgd.lookup(Config.Builder().shortUrl("").build()) } + block = { Isgd.lookup(LookupConfig.Builder("").build()) } ) } @@ -96,10 +96,10 @@ class IsgdTest { @Test fun testLookupDefaultConfig() { - assertEquals(url, Isgd.lookup(Config.Builder().shortUrl(shortUrl).build()), "lookup(config)") + assertEquals(url, Isgd.lookup(LookupConfig.Builder(shortUrl).build()), "lookup(config)") assertEquals( url, Isgd.lookup( - Config.Builder().shortUrl(shortVgdUrl).isVgd(true).build() + LookupConfig.Builder(shortVgdUrl).isVgd(true).build() ), "lookup(config:isVgd)" ) } @@ -119,12 +119,12 @@ class IsgdTest { fun testLookupJsonConfig() { assertEquals( "{ \"url\": \"$url\" }", - Isgd.lookup(Config.Builder().shortUrl(shortUrl).format(Format.JSON).build()), "lookup(config)" + Isgd.lookup(LookupConfig.Builder(shortUrl).format(Format.JSON).build()), "lookup(config)" ) assertEquals( "test({ \"url\": \"$url\" });", - Isgd.lookup(Config.Builder().shortUrl(shortUrl).callback("test").format(Format.JSON).build()), + Isgd.lookup(LookupConfig.Builder(shortUrl).callback("test").format(Format.JSON).build()), "lookup(config:callback)" ) } @@ -141,7 +141,7 @@ class IsgdTest { fun testLookupXmlConfig() { assertEquals( "$url", - Isgd.lookup(Config.Builder().shortUrl(shortUrl).format(Format.XML).build()), + Isgd.lookup(LookupConfig.Builder(shortUrl).format(Format.XML).build()), "lookup(config:xml)" ) } @@ -166,13 +166,13 @@ class IsgdTest { assertFailsWith( message = "shorten(config:empty)", exceptionClass = IllegalArgumentException::class, - block = { Isgd.shorten(Config.Builder().url("").build()) } + block = { Isgd.shorten(ShortenConfig.Builder("").build()) } ) assertFailsWith( message = "shorten(config:shorturl)", exceptionClass = IsgdException::class, - block = { Isgd.shorten(Config.Builder(url).shortUrl("test").build()) } + block = { Isgd.shorten(ShortenConfig.Builder(url).shorturl("test").build()) } ) } @@ -185,13 +185,13 @@ class IsgdTest { @Test fun testShortenDefaultConfig() { - assertEquals(shortUrl, Isgd.shorten(Config.Builder().url(url).build()), "shorten(config:url)") + assertEquals(shortUrl, Isgd.shorten(ShortenConfig.Builder(url).build()), "shorten(config:url)") assertEquals( shortVgdUrl, - Isgd.shorten(Config.Builder().url(url).isVgd(true).build()), + Isgd.shorten(ShortenConfig.Builder(url).isVgd(true).build()), "shorten(config:isVgd)" ) - assertThat(Isgd.shorten(Config.Builder().url(url).logStats(true).build()), "shorten(config:callback)") + assertThat(Isgd.shorten(ShortenConfig.Builder(url).logstats(true).build()), "shorten(config:callback)") .matches("https://is.gd/\\w{6}".toRegex()) } @@ -209,11 +209,11 @@ class IsgdTest { fun testShortenJsonConfig() { assertEquals( "{ \"shorturl\": \"$shortUrl\" }", - Isgd.shorten(Config.Builder().url(url).format(Format.JSON).build()), "shorten(config:json)" + Isgd.shorten(ShortenConfig.Builder(url).format(Format.JSON).build()), "shorten(config:json)" ) assertEquals( "test({ \"shorturl\": \"$shortUrl\" });", - Isgd.shorten(Config.Builder().url(url).callback("test").format(Format.JSON).build()), + Isgd.shorten(ShortenConfig.Builder(url).callback("test").format(Format.JSON).build()), "shorten(config:callback,json)" ) } @@ -232,7 +232,7 @@ class IsgdTest { assertEquals( "" + "$shortUrl", - Isgd.shorten(Config.Builder().url(url).format(Format.XML).build()), + Isgd.shorten(ShortenConfig.Builder(url).format(Format.XML).build()), "shorten(config:xml)" ) } @@ -244,7 +244,7 @@ class IsgdTest { @Test fun testShortenWebConfig() { - assertThat(Isgd.shorten(Config.Builder().url(url).format(Format.WEB).build()), "shorten(config:web)") + assertThat(Isgd.shorten(ShortenConfig.Builder(url).format(Format.WEB).build()), "shorten(config:web)") .contains(shortUrl) } }