Skip to content

Commit

Permalink
Merge pull request #57 from hexagontk/develop
Browse files Browse the repository at this point in the history
Update dependencies
  • Loading branch information
jaguililla authored Jun 23, 2024
2 parents 2f45492 + 20128ad commit b349a24
Show file tree
Hide file tree
Showing 21 changed files with 202 additions and 77 deletions.
82 changes: 82 additions & 0 deletions args/src/test/kotlin/com/hexagonkt/args/examples/ExamplesTest.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
package com.hexagonkt.args.examples

import com.hexagonkt.args.*
import com.hexagonkt.args.Property.Companion.HELP
import com.hexagonkt.args.Property.Companion.VERSION
import com.hexagonkt.core.require

class ExamplesTest {
private companion object {
const val serveCommandName: String = "serve"
const val createCommandName: String = "create"
const val validateCommandName: String = "validate"

const val urlParamName: String = "url"
const val addressParamName: String = "address"
const val fileParamName: String = "file"
const val templateOptShortName: Char = 't'
const val formatOptShortName: Char = 'f'
}

internal fun createProgram(buildProperties: Map<String, String>): Program {
val urlParamDescription = "URL for the CV file to use. If no schema, 'file' is assumed"
val browseFlag = Flag('b', "browse", "Open browser with served CV")
val addressParam = Option<String>(
shortName = 'a',
name = addressParamName,
description = "Address to bind the server to",
Regex("^(?:(?:25[0-5]|2[0-4]\\d|1?\\d{1,2})(?:\\.(?!\$)|\$)){4}\$"),
value = "127.0.0.1"
)
val urlParam = Parameter<String>(urlParamName, urlParamDescription, optional = false)

val serveCommand = Command(
name = serveCommandName,
title = "Serve a CV document",
description = "Serve the CV document supplied, allowing it to be rendered on a browser",
properties = setOf(HELP, browseFlag, addressParam, urlParam),
)

val createCommand = Command(
name = createCommandName,
title = "Create a CV document",
description = "Creates a new CV document based on a template",
properties = setOf(
HELP,
Option<String>(
shortName = templateOptShortName,
name = "template",
description = "Template used to create the new CV",
regex = Regex("(regular|full|minimum)"),
value = "regular",
),
Option<String>(
shortName = formatOptShortName,
name = "format",
description = "Data format used to store the generated document",
regex = Regex("(yaml|toml|json)"),
value = "yaml",
),
Parameter<String>(
name = fileParamName,
description = "File to store the CV document. Document printed on stdout if missed",
)
),
)

val validateCommand = Command(
name = validateCommandName,
title = "Validate an existing CV",
description = "Returns a list of errors and a 400 code if the CV document is not valid",
properties = setOf(HELP, urlParam),
)

return Program(
name = buildProperties.require("project"),
version = buildProperties.require("version"),
description = buildProperties.require("description"),
properties = setOf(VERSION) + serveCommand.properties,
commands = setOf(serveCommand, createCommand, validateCommand),
)
}
}
10 changes: 5 additions & 5 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -13,13 +13,13 @@ import org.gradle.api.tasks.wrapper.Wrapper.DistributionType.ALL
*/

plugins {
kotlin("jvm") version("1.9.23") apply(false)
kotlin("jvm") version(libs.versions.kotlin) apply(false)

id("idea")
id("eclipse")
id("org.jetbrains.dokka") version("1.9.20")
id("org.graalvm.buildtools.native") version("0.10.1") apply(false)
id("io.gitlab.arturbosch.detekt") version("1.23.6") apply(false)
id("org.jetbrains.dokka") version(libs.versions.dokka)
id("org.graalvm.buildtools.native") version(libs.versions.nativeTools) apply(false)
id("io.gitlab.arturbosch.detekt") version(libs.versions.detekt) apply(false)
}

ext.set("gradleScripts", "https://raw.githubusercontent.com/hexagontk/hexagon/$version/gradle")
Expand Down Expand Up @@ -69,6 +69,6 @@ task("release") {
}

tasks.wrapper {
gradleVersion = "8.7"
gradleVersion = libs.versions.gradleWrapper.get()
distributionType = ALL
}
6 changes: 3 additions & 3 deletions dokka_json/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,10 @@ apply(from = "$gradleScripts/detekt.gradle")
description = "."

dependencies {
val dokkaVersion = properties["dokkaVersion"]
val dokkaVersion = libs.versions.dokka.get()

"api"("com.hexagonkt:core:$version")
"api"("com.fasterxml.jackson.core:jackson-databind:2.15.3")
"api"("com.fasterxml.jackson.core:jackson-databind:2.15.3") // Dokka requires this fixed version
"api"("org.jetbrains.dokka:dokka-base:$dokkaVersion")
"compileOnly"("org.jetbrains.dokka:dokka-core:$dokkaVersion")

Expand All @@ -27,7 +27,7 @@ dependencies {
"testImplementation"("org.jetbrains.dokka:dokka-base-test-utils:$dokkaVersion") {
exclude("org.jetbrains.kotlin")
}
"testImplementation"("org.jetbrains:markdown:0.3.1") {
"testImplementation"("org.jetbrains:markdown:0.3.1") { // Dokka requires this fixed version
exclude("org.jetbrains.kotlin")
}
}
Expand Down
20 changes: 1 addition & 19 deletions gradle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ org.gradle.console=plain

# Gradle
# Version synchronized with Hexagon release (master)
version=3.5.3
version=3.6.0
group=com.hexagonkt.extra
description=The atoms of your platform

Expand All @@ -16,21 +16,3 @@ vcsUrl=https://github.com/hexagontk/hexagon_extra.git

# Site
siteHost=https://hexagontk.com

# VERSIONS
dokkaVersion=1.9.20
testcontainersVersion=1.19.7
dockerJavaVersion=3.3.6

# messaging_rabbitmq
rabbitVersion=5.21.0
metricsJmxVersion=4.2.25

# scheduler
cronutilsVersion=9.2.1

# store_mongodb
mongodbVersion=5.0.1

# models
jakartaMailVersion=2.0.1
Binary file modified gradle/wrapper/gradle-wrapper.jar
Binary file not shown.
2 changes: 1 addition & 1 deletion gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-all.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-all.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
Expand Down
2 changes: 1 addition & 1 deletion gradlew
Original file line number Diff line number Diff line change
Expand Up @@ -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/.
Expand Down
12 changes: 8 additions & 4 deletions messaging_rabbitmq/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,10 @@ apply(from = "$gradleScripts/dokka.gradle")
apply(from = "$gradleScripts/detekt.gradle")

dependencies {
val rabbitVersion = properties["rabbitVersion"]
val testcontainersVersion = properties["testcontainersVersion"]
val metricsJmxVersion = properties["metricsJmxVersion"]
val rabbitVersion = libs.versions.rabbit.get()
val testcontainersVersion = libs.versions.testcontainers.get()
val metricsJmxVersion = libs.versions.metricsJmx.get()
val commonsCompressVersion = libs.versions.commonsCompress.get()

"api"("com.hexagonkt:http:$version")
"api"("com.hexagonkt:serialization:$version")
Expand All @@ -23,5 +24,8 @@ dependencies {
"api"("io.dropwizard.metrics:metrics-jmx:$metricsJmxVersion")

"testImplementation"("com.hexagonkt:serialization_jackson_json:$version")
"testImplementation"("org.testcontainers:rabbitmq:$testcontainersVersion")
"testImplementation"("org.apache.commons:commons-compress:$commonsCompressVersion")
"testImplementation"("org.testcontainers:rabbitmq:$testcontainersVersion") {
exclude(module = "commons-compress")
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ import com.hexagonkt.converters.convert
import com.hexagonkt.core.retry
import com.hexagonkt.core.logging.Logger
import com.hexagonkt.core.media.MediaType
import com.hexagonkt.serialization.SerializationFormat
import com.hexagonkt.serialization.SerializationManager.formatOfOrNull
import com.hexagonkt.serialization.SerializationManager.requireDefaultFormat
import com.hexagonkt.serialization.parse
import com.hexagonkt.serialization.serialize
import com.rabbitmq.client.AMQP.BasicProperties
Expand All @@ -29,7 +29,9 @@ internal class Handler<T : Any, R : Any> internal constructor (
channel: Channel,
private val executor: ExecutorService,
private val type: KClass<T>,
private val handler: (T) -> R) : DefaultConsumer(channel) {
private val handler: (T) -> R,
private val serializationFormat: SerializationFormat
) : DefaultConsumer(channel) {

private companion object {

Expand All @@ -39,7 +41,9 @@ internal class Handler<T : Any, R : Any> internal constructor (

private val log: Logger = Logger(this::class)

private val client: RabbitMqClient by lazy { RabbitMqClient(connectionFactory) }
private val client: RabbitMqClient by lazy {
RabbitMqClient(connectionFactory, serializationFormat = serializationFormat)
}

/** @see DefaultConsumer.handleDelivery */
override fun handleDelivery(
Expand All @@ -52,7 +56,7 @@ internal class Handler<T : Any, R : Any> internal constructor (
val contentType = properties.contentType
?.let { MediaType(it) }
?.let { formatOfOrNull(it) }
?: requireDefaultFormat()
?: serializationFormat

try {
log.trace { "Received message ($correlationId) in $charset" }
Expand Down Expand Up @@ -110,7 +114,7 @@ internal class Handler<T : Any, R : Any> internal constructor (
is String -> response
is Int -> response.toString()
is Long -> response.toString()
else -> response.serialize()
else -> response.serialize(serializationFormat)
}

client.publish(replyTo, output, correlationId)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,26 +2,31 @@ package com.hexagonkt.messaging.rabbitmq

import com.hexagonkt.messaging.Message
import com.hexagonkt.messaging.MessagingPort
import com.hexagonkt.serialization.SerializationFormat
import com.hexagonkt.serialization.serialize
import java.net.URI
import kotlin.reflect.KClass

class RabbitMqAdapter(url: String = "amqp://guest:guest@localhost") : MessagingPort {
class RabbitMqAdapter(
url: String = "amqp://guest:guest@localhost",
private val serializationFormat: SerializationFormat
) : MessagingPort {

private companion object {
private const val exchange = "messages"
private const val EXCHANGE = "messages"
}

private val client by lazy { RabbitMqClient(URI(url)) }
private val client by lazy { RabbitMqClient(URI(url), serializationFormat) }

init {
client.bindExchange(exchange, "topic", "*.*.*", "event_pool")
client.bindExchange(EXCHANGE, "topic", "*.*.*", "event_pool")
}

override fun <T : Message> consume(type: KClass<T>, address: String, consumer: (T) -> Unit) {
client.consume(exchange, address, type) { consumer(it) }
client.consume(EXCHANGE, address, type) { consumer(it) }
}

override fun publish(message: Message, address: String) {
client.publish(exchange, address, message.serialize())
client.publish(EXCHANGE, address, message.serialize(serializationFormat))
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import com.codahale.metrics.MetricRegistry
import com.hexagonkt.http.parseQueryString
import com.hexagonkt.core.*
import com.hexagonkt.http.model.QueryParameters
import com.hexagonkt.serialization.SerializationFormat
import com.rabbitmq.client.*
import com.rabbitmq.client.AMQP.BasicProperties
import com.rabbitmq.client.impl.StandardMetricsCollector
Expand All @@ -27,7 +28,9 @@ import kotlin.reflect.KClass
*/
class RabbitMqClient(
private val connectionFactory: ConnectionFactory,
private val poolSize: Int = getRuntime().availableProcessors()) : Closeable {
private val poolSize: Int = getRuntime().availableProcessors(),
private val serializationFormat: SerializationFormat
) : Closeable {

internal companion object {

Expand Down Expand Up @@ -71,7 +74,8 @@ class RabbitMqClient(
private val listener = ConnectionListener()

/** . */
constructor (uri: URI) : this(createConnectionFactory(uri))
constructor (uri: URI, serializationFormat: SerializationFormat) :
this(createConnectionFactory(uri), serializationFormat = serializationFormat)

/** . */
val connected: Boolean get() = connection?.isOpen ?: false
Expand Down Expand Up @@ -121,7 +125,14 @@ class RabbitMqClient(

fun <T : Any, R : Any> consume(queueName: String, type: KClass<T>, handler: (T) -> R) {
val channel = createChannel()
val callback = Handler(connectionFactory, channel, threadPool, type, handler)
val callback = Handler(
connectionFactory,
channel,
threadPool,
type,
handler,
serializationFormat = serializationFormat
)
channel.basicConsume(queueName, false, callback)
log.info { "Consuming messages in $queueName" }
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@ package com.hexagonkt.messaging.rabbitmq

import com.hexagonkt.converters.ConvertersManager
import com.hexagonkt.core.logging.Logger
import com.hexagonkt.serialization.SerializationManager
import com.hexagonkt.serialization.jackson.json.Json

import org.junit.jupiter.api.AfterAll
Expand Down Expand Up @@ -40,11 +39,10 @@ internal class RabbitConnectionTest {

private val log: Logger = Logger(this::class)

private val consumer: RabbitMqClient by lazy { RabbitMqClient(URI(URI)) }
private val client: RabbitMqClient by lazy { RabbitMqClient(URI(URI)) }
private val consumer: RabbitMqClient by lazy { RabbitMqClient(URI(URI), Json) }
private val client: RabbitMqClient by lazy { RabbitMqClient(URI(URI), Json) }

@BeforeAll fun startConsumer() {
SerializationManager.defaultFormat = Json
ConvertersManager.register(Long::class to String::class) { it.toString() }

rabbitMq.start()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package com.hexagonkt.messaging.rabbitmq

import com.hexagonkt.messaging.MessagingPort
import com.hexagonkt.messaging.rabbitmq.RabbitTest.Companion.PORT
import com.hexagonkt.serialization.jackson.json.Json
import org.junit.jupiter.api.condition.DisabledOnOs
import org.junit.jupiter.api.condition.OS
import kotlin.test.Test
Expand All @@ -12,7 +13,7 @@ internal class RabbitMqAdapterTest {
* TODO Add asserts
*/
@Test fun `Event manager` () {
val engine: MessagingPort = RabbitMqAdapter("amqp://guest:guest@localhost:$PORT")
val engine: MessagingPort = RabbitMqAdapter("amqp://guest:guest@localhost:$PORT", Json)
engine.consume(RabbitTest.Sample::class) {
if (it.str == "no message error")
throw IllegalStateException()
Expand Down
Loading

0 comments on commit b349a24

Please sign in to comment.