Skip to content

Commit

Permalink
no longer generate a JS router
Browse files Browse the repository at this point in the history
  • Loading branch information
ornicar committed Apr 23, 2019
1 parent 775848d commit a23ee96
Show file tree
Hide file tree
Showing 2 changed files with 99 additions and 0 deletions.
2 changes: 2 additions & 0 deletions build.sbt
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,8 @@ unmanagedResourceDirectories in Assets ++= (if (scala.sys.env.get("SERVE_ASSETS"
scalariformPreferences := scalariformPrefs(scalariformPreferences.value)
excludeFilter in scalariformFormat := "*Routes*"

routesGenerator := LilaRoutesGenerator

lazy val modules = Seq(
common, db, rating, user, security, hub, socket,
message, notifyModule, i18n, game, bookmark, search,
Expand Down
97 changes: 97 additions & 0 deletions project/RoutesCompiler.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
import play.routes.compiler._

import play.routes.compiler.RoutesCompiler.RoutesCompilerTask
import java.io.File

object LilaRoutesGenerator extends RoutesGenerator {

val ForwardsRoutesFile = "Routes.scala"
val ReverseRoutesFile = "ReverseRoutes.scala"
val RoutesPrefixFile = "RoutesPrefix.scala"
val JavaWrapperFile = "routes.java"

val id = "lila"

def generate(task: RoutesCompilerTask, namespace: Option[String], rules: List[Rule]): Seq[(String, String)] = {

val folder = namespace.map(_.replace('.', '/') + "/").getOrElse("") + "/"

val sourceInfo = RoutesSourceInfo(task.file.getCanonicalPath.replace(File.separator, "/"), new java.util.Date().toString)
val routes = rules.collect { case r: Route => r }

val forwardsRoutesFiles = if (task.forwardsRouter) {
Seq(folder + ForwardsRoutesFile -> generateRouter(sourceInfo, namespace, task.additionalImports, rules))
} else {
Nil
}

val reverseRoutesFiles = if (task.reverseRouter) {
Seq(folder + RoutesPrefixFile -> generateRoutesPrefix(sourceInfo, namespace)) ++
generateReverseRouters(sourceInfo, namespace, task.additionalImports, routes, task.namespaceReverseRouter) ++
generateJavaWrappers(sourceInfo, namespace, rules, task.namespaceReverseRouter)
} else {
Nil
}

forwardsRoutesFiles ++ reverseRoutesFiles
}

private def generateRouter(sourceInfo: RoutesSourceInfo, namespace: Option[String], additionalImports: Seq[String], rules: List[Rule]) =
static.twirl.forwardsRouter(
sourceInfo,
namespace,
additionalImports,
rules
).body

private def generateRoutesPrefix(sourceInfo: RoutesSourceInfo, namespace: Option[String]) =
static.twirl.routesPrefix(
sourceInfo,
namespace,
_.call.instantiate
).body

private def generateReverseRouters(sourceInfo: RoutesSourceInfo, namespace: Option[String], additionalImports: Seq[String], routes: List[Route], namespaceReverseRouter: Boolean) = {
routes.groupBy(_.call.packageName).map {
case (pn, routes) =>
val packageName = namespace.filter(_ => namespaceReverseRouter).map(_ + "." + pn).getOrElse(pn)
(packageName.replace(".", "/") + "/" + ReverseRoutesFile) ->
static.twirl.reverseRouter(
sourceInfo,
namespace,
additionalImports,
packageName,
routes,
namespaceReverseRouter,
_.call.instantiate
).body
}
}

private def generateJavaWrappers(sourceInfo: RoutesSourceInfo, namespace: Option[String], rules: List[Rule], namespaceReverseRouter: Boolean) = {
rules.collect { case r: Route => r }.groupBy(_.call.packageName).map {
case (pn, routes) =>
val packageName = namespace.filter(_ => namespaceReverseRouter).map(_ + "." + pn).getOrElse(pn)
val controllers = routes.groupBy(_.call.controller).keys.toSeq

(packageName.replace(".", "/") + "/" + JavaWrapperFile) ->
renderJavaWrappers(sourceInfo, namespace, packageName, controllers)
}
}

private def renderJavaWrappers(
sourceInfo: RoutesSourceInfo,
pkg: Option[String],
packageName: String,
controllers: Seq[String]) = s"""package $packageName;

import ${pkg getOrElse "_routes_"}.RoutesPrefix;

public class routes {
""" + controllers.map { controller =>
s"""public static final ${packageName}.Reverse${controller} ${controller} = new ${packageName}.Reverse${controller}(RoutesPrefix.byNamePrefix());
"""
}.mkString + """
}"""
}

0 comments on commit a23ee96

Please sign in to comment.