Guest User

Untitled

a guest
Feb 18th, 2018
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.27 KB | None | 0 0
  1. import sbt._
  2. import Keys._
  3. import Project.Initialize
  4.  
  5. import java.util.Properties
  6. import java.io.FileInputStream
  7.  
  8. import scala.collection.JavaConversions.asScalaSet
  9.  
  10. import com.zentrope.ScalatePlugin._
  11.  
  12. object MyBuild extends Build {
  13. import TemplateProcessor._
  14.  
  15. val templateDirectory = "target/templates-prepared"
  16. val scalateTemplateDir = SettingKey[File]("scalate-template-directory")
  17.  
  18. lazy val root = Project("root", file(".")) settings(
  19. sbtPlugin := true,
  20. name := "Scails",
  21. organization := "com.codequirks",
  22. version := "0.1.0",
  23. scalateTemplateDir := file("src/main/resources"),
  24.  
  25. scalateTemplateDirectories in Compile <<= (scalateTemplateDirectories in Compile, baseDirectory) {
  26. (dirs, basedir) =>
  27. dirs ++ Seq(new File(basedir, "/" + templateDirectory))
  28. },
  29.  
  30. cleanFiles <<= (cleanFiles, baseDirectory) {
  31. (files, basedir) =>
  32. files ++ Seq(new File(basedir, "/" + templateDirectory))
  33. },
  34.  
  35. libraryDependencies ++= Seq(
  36. "org.fusesource.scalate" % "scalate-core" % "1.4.1" % "compile",
  37. "ch.qos.logback" % "logback-classic" % "0.9.28" % "compile"
  38. ),
  39.  
  40. sourceGenerators in Compile <+= scalateTemplateDir map { startDir =>
  41. file(templateDirectory).mkdirs
  42. processDirectory(Seq[String](), startDir)
  43. Seq[File]()
  44. }
  45. )
  46.  
  47. def processDirectory(basePath : Seq[String], dir : File) {
  48. file(templateDirectory).mkdirs
  49. dir.listFiles.filter(_.getName == "template.properties").foreach(copyTemplates(basePath, _))
  50. dir.listFiles.filter(_.isDirectory).foreach(f => processDirectory(basePath :+ f.getName, f))
  51. }
  52.  
  53. def copyTemplates(basePath : Seq[String], propsFile : File) {
  54. val props = new Properties
  55. val templatePrefix = basePath.mkString("","_","_")
  56. props.load(new FileInputStream(propsFile))
  57. props.keySet.foreach { keyO =>
  58. val key = keyO.toString
  59. if(isTemplate(key)) {
  60. val template = file(propsFile.getParent+"/"+key)
  61. val templateTarget = key.replace("/", "_")
  62. val target = file(templateDirectory+"/"+templatePrefix+templateTarget)
  63. IO.copyFile(template, target)
  64. }
  65. }
  66. }
  67.  
  68. def isTemplate(key : String) = {
  69. key.endsWith(".scaml") ||
  70. key.endsWith(".jade") ||
  71. key.endsWith(".ssp") ||
  72. key.endsWith(".mousetache")
  73. }
  74.  
  75. }
Add Comment
Please, Sign In to add comment