Skip to content

Commit

Permalink
GH-35 Expose compatible with Java register method in the core module (R…
Browse files Browse the repository at this point in the history
…esolve #35)
  • Loading branch information
dzikoysk committed Jun 29, 2023
1 parent 59c53ea commit 5b94afb
Show file tree
Hide file tree
Showing 4 changed files with 84 additions and 32 deletions.

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
package io.javalin.community.routing

import io.javalin.Javalin
import io.javalin.http.Handler
import io.javalin.security.RouteRole

class JavalinRoutingExtensions(private val javalin: Javalin) {

private val routes = mutableListOf<HandlerEntry>()

fun addRouteHandler(vararg handlerEntry: HandlerEntry): JavalinRoutingExtensions = also {
routes.addAll(handlerEntry)
}

@JvmOverloads
fun addRoute(route: Route, path: String, vararg roles: RouteRole = emptyArray(), handler: Handler): JavalinRoutingExtensions = also {
routes.add(HandlerEntry(route, path, handler, roles.toList()))
}

fun register(): Javalin {
routes
.sortRoutes()
.forEach { javalin.registerRoute(it) }

return javalin
}

}

data class HandlerEntry @JvmOverloads constructor(
val route: Route,
override val path: String,
val handler: Handler,
val roles: List<RouteRole> = emptyList(),
) : Routed

fun Javalin.registerRoute(handlerEntry: HandlerEntry) =
registerRoute(handlerEntry.route, handlerEntry.path, handlerEntry.handler, *handlerEntry.roles.toTypedArray())

fun Javalin.registerRoute(route: Route, path: String, handler: Handler, vararg roles: RouteRole) {
when (route) {
Route.HEAD -> head(path, handler, *roles)
Route.PATCH -> patch(path, handler, *roles)
Route.OPTIONS -> options(path, handler, *roles)
Route.GET -> get(path, handler, *roles)
Route.PUT -> put(path, handler, *roles)
Route.POST -> post(path, handler, *roles)
Route.DELETE -> delete(path, handler, *roles)
Route.AFTER -> after(path, handler)
Route.BEFORE -> before(path, handler)
}
}
13 changes: 13 additions & 0 deletions routing-core/src/main/kotlin/io/javalin/community/routing/Route.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package io.javalin.community.routing

enum class Route(val isHttpMethod: Boolean = true) {
HEAD,
PATCH,
OPTIONS,
GET,
PUT,
POST,
DELETE,
AFTER(isHttpMethod = false),
BEFORE(isHttpMethod = false),
}
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package io.javalin.community.routing

import io.javalin.Javalin
import io.javalin.community.routing.Route.GET
import io.javalin.community.routing.Route.PUT
import io.javalin.http.Handler
import io.javalin.http.HandlerType
import org.assertj.core.api.Assertions.assertThat
Expand All @@ -17,7 +19,6 @@ class JavalinRoutesTest {
// when: routes are registered
val app = Javalin.create()
.apply { routes.forEach { route -> registerRoute(route.first, "/", route.second) } }
.start()

// then: all routes are registered by as proper HandlerType
routes.forEach { (method, handler) ->
Expand All @@ -31,4 +32,21 @@ class JavalinRoutesTest {
}
}

@Test
fun `should register routes`() {
val app = JavalinRoutingExtensions(Javalin.create())
.addRoute(GET, "/") { it.result("Hello World!") }
.addRoute(PUT, "/") { it.result("Hello World!") }
.register()

listOf("GET", "PUT").forEach { method ->
assertThat(
app.javalinServlet()
.matcher
.findEntries(HandlerType.findByName(method), "/")
.firstOrNull()
).isNotNull
}
}

}

0 comments on commit 5b94afb

Please sign in to comment.