diff --git a/README.md b/README.md index ddbf40c..e1e0320 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # [Pinboard](https://pinboard.in) Poster for Kotlin, Java and Android [![License (3-Clause BSD)](https://img.shields.io/badge/license-BSD%203--Clause-blue.svg?style=flat-square)](https://opensource.org/licenses/BSD-3-Clause) -[![Kotlin](https://img.shields.io/badge/kotlin-2.0.0-7f52ff)](https://kotlinlang.org/) +[![Kotlin](https://img.shields.io/badge/kotlin-1.9.24-7f52ff)](https://kotlinlang.org/) [![bld](https://img.shields.io/badge/1.9.1-FA9052?label=bld&labelColor=2392FF)](https://rife2.com/bld) [![Release](https://img.shields.io/github/release/ethauvin/pinboard-poster.svg)](https://github.com/ethauvin/pinboard-poster/releases/latest) [![Maven Central](https://img.shields.io/maven-central/v/net.thauvin.erik/pinboard-poster.svg?color=blue)](https://central.sonatype.com/artifact/net.thauvin.erik/pinboard-poster) @@ -22,9 +22,9 @@ A small library for posting to [Pinboard](https://pinboard.in). val poster = PinboardPoster("user:TOKEN") -poster.addPin("https://example.com/foo", "This is a test") -poster.addPin("https://example.com", "This is a test", tags = arrayOf("foo", "bar")) -poster.deletePin("https://example.com/bar") +poster.addPin("https://www.example.com/foo", "This is a test") +poster.addPin("https://examples.com", "This is a test", tags = arrayOf("foo", "bar")) +poster.deletePin("https:///www.example.com/bar") ``` @@ -36,11 +36,13 @@ poster.deletePin("https://example.com/bar") final PinboardPoster poster = new PinBboardPoster("user:TOKEN"); -poster.addPin("https://example.com/foo", "This is a test"); -poster.addPin(new PinConfig.Builder("https://example.com", "This is a test") +poster.addPin("https://www.example.com/foo", "This is a test"); +poster.addPin(new PinConfig.Builder() + .url("https://example.com") + .description("This is a test") .tags("foo", "bar") .build()); -poster.deletePin("https://example.com/bar"); +poster.deletePin("https:///www.example.com/bar"); ``` [View Examples](https://github.com/ethauvin/pinboard-poster/blob/master/examples) diff --git a/config/detekt/baseline.xml b/config/detekt/baseline.xml index 3f97ec1..6c39509 100644 --- a/config/detekt/baseline.xml +++ b/config/detekt/baseline.xml @@ -1,10 +1,10 @@ - + - + - LongParameterList:PinConfig.kt$PinConfig$( var url: String, var description: String, var extended: String = "", var tags: Array<out String> = emptyArray(), var dt: ZonedDateTime = ZonedDateTime.now(), var replace: Boolean = true, var shared: Boolean = true, var toRead: Boolean = false ) + LongParameterList:PinConfig.kt$PinConfig$( val url: String, val description: String, val extended: String, val tags: Array<out String>, val dt: ZonedDateTime, val replace: Boolean, val shared: Boolean, val toRead: Boolean ) LongParameterList:PinboardPoster.kt$PinboardPoster$( url: String, description: String, extended: String = "", vararg tags: String = emptyArray(), dt: ZonedDateTime = ZonedDateTime.now(), replace: Boolean = true, shared: Boolean = true, toRead: Boolean = false ) - NestedBlockDepth:PinboardPoster.kt$PinboardPoster$private fun executeMethod(method: String, params: Map<String, String>): Boolean + NestedBlockDepth:PinboardPoster.kt$PinboardPoster$private fun executeMethod(method: String, params: Map<String, String>): Boolean ThrowsCount:PinboardPoster.kt$PinboardPoster$@Throws(IOException::class) internal fun parseMethodResponse(method: String, response: String) TooManyFunctions:PinConfig.kt$PinConfig$Builder diff --git a/examples/bld/lib/bld/bld-wrapper.properties b/examples/bld/lib/bld/bld-wrapper.properties index b32aeb6..113b890 100644 --- a/examples/bld/lib/bld/bld-wrapper.properties +++ b/examples/bld/lib/bld/bld-wrapper.properties @@ -1,6 +1,6 @@ bld.downloadExtensionJavadoc=false bld.downloadExtensionSources=true -bld.extensions=com.uwyn.rife2:bld-kotlin:0.9.7 +bld.extensions=com.uwyn.rife2:bld-kotlin:0.9.4 bld.repositories=MAVEN_LOCAL,MAVEN_CENTRAL,RIFE2_SNAPSHOTS,RIFE2_RELEASES bld.downloadLocation= bld.sourceDirectories= diff --git a/examples/bld/src/main/java/net/thauvin/erik/pinboard/samples/JavaExample.java b/examples/bld/src/main/java/net/thauvin/erik/pinboard/samples/JavaExample.java index 1ef224b..e638a44 100644 --- a/examples/bld/src/main/java/net/thauvin/erik/pinboard/samples/JavaExample.java +++ b/examples/bld/src/main/java/net/thauvin/erik/pinboard/samples/JavaExample.java @@ -31,7 +31,9 @@ public class JavaExample { if (poster.validate()) { // Add Pin - if (poster.addPin(new PinConfig.Builder(url, "Testing") + if (poster.addPin(new PinConfig.Builder() + .url(url) + .description("Testing") .extended("Extra") .tags("test", "java") .build())) { diff --git a/examples/gradle/java/.idea/misc.xml b/examples/gradle/java/.idea/misc.xml index 7adacb2..cb3f07e 100644 --- a/examples/gradle/java/.idea/misc.xml +++ b/examples/gradle/java/.idea/misc.xml @@ -1,8 +1,8 @@ - - + + - + diff --git a/examples/gradle/java/build.gradle b/examples/gradle/java/build.gradle index e2c0e0a..a4c4a91 100644 --- a/examples/gradle/java/build.gradle +++ b/examples/gradle/java/build.gradle @@ -19,5 +19,5 @@ repositories { } dependencies { - implementation 'net.thauvin.erik:pinboard-poster:1.1.2-SNAPSHOT' + implementation 'net.thauvin.erik:pinboard-poster:1.1.1' } diff --git a/examples/gradle/java/settings.gradle b/examples/gradle/java/settings.gradle index 87b714a..e7ecd5d 100644 --- a/examples/gradle/java/settings.gradle +++ b/examples/gradle/java/settings.gradle @@ -7,4 +7,4 @@ * in the user guide at https://docs.gradle.org/4.8/userguide/multi_project_builds.html */ -rootProject.name = 'pinboard-poster-examples-gradle-java' +rootProject.name = 'samples-java' diff --git a/examples/gradle/java/src/main/java/net/thauvin/erik/pinboard/samples/JavaExample.java b/examples/gradle/java/src/main/java/net/thauvin/erik/pinboard/samples/JavaExample.java index 1ef224b..e638a44 100644 --- a/examples/gradle/java/src/main/java/net/thauvin/erik/pinboard/samples/JavaExample.java +++ b/examples/gradle/java/src/main/java/net/thauvin/erik/pinboard/samples/JavaExample.java @@ -31,7 +31,9 @@ public class JavaExample { if (poster.validate()) { // Add Pin - if (poster.addPin(new PinConfig.Builder(url, "Testing") + if (poster.addPin(new PinConfig.Builder() + .url(url) + .description("Testing") .extended("Extra") .tags("test", "java") .build())) { diff --git a/examples/gradle/kotlin/.idea/.name b/examples/gradle/kotlin/.idea/.name index 7379aed..91c6ff0 100644 --- a/examples/gradle/kotlin/.idea/.name +++ b/examples/gradle/kotlin/.idea/.name @@ -1 +1 @@ -pinboard-post-examples-gradle-kotlin \ No newline at end of file +pinboard-poster-examples-gradle-kotlin \ No newline at end of file diff --git a/examples/gradle/kotlin/.idea/kotlinc.xml b/examples/gradle/kotlin/.idea/kotlinc.xml index 6d0ee1c..ae3f30a 100644 --- a/examples/gradle/kotlin/.idea/kotlinc.xml +++ b/examples/gradle/kotlin/.idea/kotlinc.xml @@ -1,6 +1,6 @@ - \ No newline at end of file diff --git a/examples/gradle/kotlin/.idea/misc.xml b/examples/gradle/kotlin/.idea/misc.xml index 034d4d4..cb3f07e 100644 --- a/examples/gradle/kotlin/.idea/misc.xml +++ b/examples/gradle/kotlin/.idea/misc.xml @@ -4,5 +4,5 @@ - - \ No newline at end of file + + diff --git a/examples/gradle/kotlin/build.gradle.kts b/examples/gradle/kotlin/build.gradle.kts index 5e40908..a6312ba 100644 --- a/examples/gradle/kotlin/build.gradle.kts +++ b/examples/gradle/kotlin/build.gradle.kts @@ -3,7 +3,7 @@ import org.jetbrains.kotlin.gradle.tasks.KotlinCompile plugins { id("application") id("com.github.ben-manes.versions") version "0.51.0" - kotlin("jvm") version "2.0.0" + kotlin("jvm") version "1.9.24" } defaultTasks(ApplicationPlugin.TASK_RUN_NAME) diff --git a/examples/gradle/kotlin/settings.gradle.kts b/examples/gradle/kotlin/settings.gradle.kts index 5d8ff15..28613c7 100644 --- a/examples/gradle/kotlin/settings.gradle.kts +++ b/examples/gradle/kotlin/settings.gradle.kts @@ -1 +1 @@ -rootProject.name = "pinboard-post-examples-gradle-kotlin" +rootProject.name = "samples-kotlin" diff --git a/lib/bld/bld-wrapper.properties b/lib/bld/bld-wrapper.properties index 522f399..14f20df 100644 --- a/lib/bld/bld-wrapper.properties +++ b/lib/bld/bld-wrapper.properties @@ -1,8 +1,8 @@ bld.downloadExtensionJavadoc=false bld.downloadExtensionSources=true -bld.extension.jacoco=com.uwyn.rife2:bld-jacoco-report:0.9.5 -bld.extensions=com.uwyn.rife2:bld-kotlin:0.9.7 -bld.extension-detekt=com.uwyn.rife2:bld-detekt:0.9.4 +bld.extension.jacoco=com.uwyn.rife2:bld-jacoco-report:0.9.3 +bld.extensions=com.uwyn.rife2:bld-kotlin:0.9.4 +bld.extension-detekt=com.uwyn.rife2:bld-detekt:0.9.4-SNAPSHOT bld.repositories=MAVEN_LOCAL,MAVEN_CENTRAL,RIFE2_SNAPSHOTS,RIFE2_RELEASES bld.downloadLocation= bld.sourceDirectories= diff --git a/src/bld/java/net/thauvin/erik/pinboard/PinboardPosterBuild.java b/src/bld/java/net/thauvin/erik/pinboard/PinboardPosterBuild.java index 30802d0..c8de91e 100644 --- a/src/bld/java/net/thauvin/erik/pinboard/PinboardPosterBuild.java +++ b/src/bld/java/net/thauvin/erik/pinboard/PinboardPosterBuild.java @@ -70,7 +70,7 @@ public class PinboardPosterBuild extends Project { repositories = List.of(MAVEN_LOCAL, MAVEN_CENTRAL); final var okHttp = version(4, 12, 0); - final var kotlin = version(2, 0, 0); + final var kotlin = version(1, 9, 24); scope(compile) // Kotlin .include(dependency("org.jetbrains.kotlin", "kotlin-stdlib", kotlin)) diff --git a/src/main/kotlin/net/thauvin/erik/pinboard/PinConfig.kt b/src/main/kotlin/net/thauvin/erik/pinboard/PinConfig.kt index f1a1495..32ee785 100644 --- a/src/main/kotlin/net/thauvin/erik/pinboard/PinConfig.kt +++ b/src/main/kotlin/net/thauvin/erik/pinboard/PinConfig.kt @@ -37,86 +37,49 @@ import java.time.ZonedDateTime * Provides a builder to add a pin. * * Supports of all the [Pinboard API Parameters](https://pinboard.in/api/#posts_add). - * - * @param url The URL of the bookmark. - * @param description The title of the bookmark. */ -class PinConfig @JvmOverloads constructor( - var url: String, - var description: String, - var extended: String = "", - var tags: Array = emptyArray(), - var dt: ZonedDateTime = ZonedDateTime.now(), - var replace: Boolean = true, - var shared: Boolean = true, - var toRead: Boolean = false +class PinConfig private constructor( + val url: String, + val description: String, + val extended: String, + val tags: Array, + val dt: ZonedDateTime, + val replace: Boolean, + val shared: Boolean, + val toRead: Boolean ) { - constructor(builder: Builder) : this(builder.url, builder.description) { - extended = builder.extended - tags = builder.tags - dt = builder.dt - replace = builder.replace - shared = builder.shared - toRead = builder.toRead - } /** * Configures the parameters to add a pin. - * - * @param url The URL of the bookmark. - * @param description The title of the bookmark. */ - data class Builder(var url: String, var description: String) { - var extended: String = "" - var tags: Array = emptyArray() - var dt: ZonedDateTime = ZonedDateTime.now() - var replace: Boolean = true - var shared: Boolean = true - var toRead: Boolean = false - - /** - * The URL of the bookmark. - */ + data class Builder( + private var url: String = "", + private var description: String = "", + private var extended: String = "", + private var tags: Array = emptyArray(), + private var dt: ZonedDateTime = ZonedDateTime.now(), + private var replace: Boolean = true, + private var shared: Boolean = true, + private var toRead: Boolean = false + ) { fun url(url: String) = apply { this.url = url } - - /** - * The title of the bookmark. - */ fun description(description: String) = apply { this.description = description } - - /** - * The description of the bookmark. - */ fun extended(extended: String) = apply { this.extended = extended } - - /** - * A list of up to 100 tags. - */ fun tags(vararg tag: String) = apply { this.tags = tag } - - /** - * The creation time of the bookmark. - */ fun dt(datetime: ZonedDateTime) = apply { this.dt = datetime } - - /** - * Replace any existing bookmark with the specified URL. Default `true`. - */ fun replace(replace: Boolean) = apply { this.replace = replace } - - /** - * Make bookmark public. Default is `true`. - */ fun shared(shared: Boolean) = apply { this.shared = shared } - - /** - * Mark the bookmark as unread. Default is `false`. - */ fun toRead(toRead: Boolean) = apply { this.toRead = toRead } - /** - * Builds a new comment configuration. - */ - fun build() = PinConfig(this) + fun build() = PinConfig( + url, + description, + extended, + tags, + dt, + replace, + shared, + toRead + ) override fun equals(other: Any?): Boolean { if (this === other) return true diff --git a/src/test/kotlin/net/thauvin/erik/pinboard/PinboardPosterTest.kt b/src/test/kotlin/net/thauvin/erik/pinboard/PinboardPosterTest.kt index d20417c..e4570d0 100644 --- a/src/test/kotlin/net/thauvin/erik/pinboard/PinboardPosterTest.kt +++ b/src/test/kotlin/net/thauvin/erik/pinboard/PinboardPosterTest.kt @@ -44,13 +44,11 @@ import kotlin.test.assertFalse import kotlin.test.assertTrue class PinboardPosterTest { - private val url = randomUrl() + private val url = "http://www.example.com/?random=" + (1000..10000).random() private val desc = "This is a test." private val localProps = Paths.get("local.properties") private val isCi = "true" == System.getenv("CI") - private fun randomUrl(): String = "http://www.example.com/?random=" + (1000..10000).random() - @Test fun testAddPin() { var poster = PinboardPoster("") @@ -85,7 +83,7 @@ class PinboardPosterTest { assertTrue(poster.validate(), "validate()") - var config = PinConfig.Builder(url, desc).extended("extra") + var config = PinConfig.Builder().url(url).description(desc).extended("extra") assertTrue(poster.addPin(config.build()), "apiToken: ${Constants.ENV_API_TOKEN}") @@ -101,17 +99,13 @@ class PinboardPosterTest { assertTrue(e.message!!.contains("item already exists")) } - config = config.description("Yet another test.").replace(true).toRead(true) + config = config.replace(true).toRead(true) assertTrue(poster.addPin(config.build()), "toRead(true)") config = config.dt(ZonedDateTime.now()) assertTrue(poster.addPin(config.build()), "dt(now)") assertTrue(poster.deletePin(url), "deletePin($url)") - - config = config.url(randomUrl()) - assertTrue(poster.addPin(config.build()), "add($url)") - assertTrue(poster.deletePin(config.url), "delete($url)") } @Test