aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohannes Rudolph <johannes.rudolph@gmail.com>2016-03-01 14:29:56 +0100
committerJohannes Rudolph <johannes.rudolph@gmail.com>2016-03-01 14:29:56 +0100
commit11b21a1042dd4bb5007ff3e7eaf18b5e7dbdf8dd (patch)
tree4be31196b4b1ede766c3069ef0e374b9ef4f7037
parent6ccb744c22c767df71b74cccc19fef31fb790e7c (diff)
downloadsbt-boilerplate-11b21a1042dd4bb5007ff3e7eaf18b5e7dbdf8dd.tar.gz
sbt-boilerplate-11b21a1042dd4bb5007ff3e7eaf18b5e7dbdf8dd.tar.bz2
sbt-boilerplate-11b21a1042dd4bb5007ff3e7eaf18b5e7dbdf8dd.zip
make this an AutoPlugin, fixes #19
-rw-r--r--README.md13
-rw-r--r--src/main/scala/spray/boilerplate/BoilerplatePlugin.scala85
2 files changed, 51 insertions, 47 deletions
diff --git a/README.md b/README.md
index 481144b..3e37902 100644
--- a/README.md
+++ b/README.md
@@ -78,13 +78,13 @@ This now expands correctly to
Put
- addSbtPlugin("io.spray" % "sbt-boilerplate" % "0.5.9")
+ addSbtPlugin("io.spray" % "sbt-boilerplate" % "0.6.0")
-into your `plugins.sbt` and add
+into your `plugins.sbt`. sbt-boilerplate is an `AutoPlugin` which needs to be enabled using
- Boilerplate.settings
-
-to your `build.sbt`.
+```scala
+enablePlugins(spray.boilerplate.BoilerplatePlugin)
+```
The templates have to be put into the `src/main/boilerplate` directory and the file name
must end with `.template`. The generated files will be put into the same hierarchy as they
@@ -93,8 +93,7 @@ filename has no extension ".scala" is added automatically.
## Known issues
- * The maximum number of arguments, 22, is hard-coded.
- * Instances for 0 arguments have to be supplied manually.
+ * Instances for zero arguments have to be supplied manually.
## Projects using sbt-boilerplate
diff --git a/src/main/scala/spray/boilerplate/BoilerplatePlugin.scala b/src/main/scala/spray/boilerplate/BoilerplatePlugin.scala
index 0e63014..9394be8 100644
--- a/src/main/scala/spray/boilerplate/BoilerplatePlugin.scala
+++ b/src/main/scala/spray/boilerplate/BoilerplatePlugin.scala
@@ -9,51 +9,56 @@ package spray.boilerplate
import sbt._
import Keys._
-object BoilerplatePlugin extends Plugin {
- object Boilerplate {
+object BoilerplatePlugin extends AutoPlugin {
+ override def trigger: PluginTrigger = noTrigger
+ override def `requires`: Plugins = empty
+
+ object autoImport {
val boilerplateGenerate = taskKey[Seq[File]]("Generates boilerplate from template files")
val boilerplateSource = settingKey[File]("Default directory containing boilerplate template sources.")
+ }
+
+ import autoImport._
+
+ override def projectSettings: Seq[Def.Setting[_]] =
+ inConfig(Compile)(rawBoilerplateSettings) ++ inConfig(Test)(rawBoilerplateSettings)
+
+ private def rawBoilerplateSettings: Seq[Setting[_]] = {
+ val inputFilter = "*.template"
+ Seq(
+ boilerplateSource := sourceDirectory.value / "boilerplate",
+ watchSources in Defaults.ConfigGlobal ++= ((boilerplateSource.value ** inputFilter) --- (boilerplateSource.value ** excludeFilter.value ** inputFilter)).get,
+ boilerplateGenerate := generateFromTemplates(streams.value, boilerplateSource.value, sourceManaged.value),
+ mappings in packageSrc ++= managedSources.value pair (Path.relativeTo(sourceManaged.value) | Path.flat),
+ sourceGenerators <+= boilerplateGenerate)
+ }
+
+ def generateFromTemplates(streams: TaskStreams, sourceDir: File, targetDir: File): Seq[File] = {
+ val files = sourceDir ** "*.template"
- private def rawBoilerplateSettings: Seq[Setting[_]] = {
- val inputFilter = "*.template"
- Seq(
- boilerplateSource := sourceDirectory.value / "boilerplate",
- watchSources in Defaults.ConfigGlobal ++= ((boilerplateSource.value ** inputFilter) --- (boilerplateSource.value ** excludeFilter.value ** inputFilter)).get,
- boilerplateGenerate := generateFromTemplates(streams.value, boilerplateSource.value, sourceManaged.value),
- mappings in packageSrc ++= managedSources.value x (Path.relativeTo(sourceManaged.value) | Path.flat),
- sourceGenerators <+= boilerplateGenerate)
+ def changeExtension(f: File): File = {
+ val (_, name) = f.getName.reverse.span(_ != '.')
+ val strippedName = name.drop(1).reverse.toString
+ val newName =
+ if (!strippedName.contains(".")) s"$strippedName.scala"
+ else strippedName
+ new File(f.getParent, newName)
}
- val settings =
- inConfig(Compile)(rawBoilerplateSettings) ++ inConfig(Test)(rawBoilerplateSettings)
-
- def generateFromTemplates(streams: TaskStreams, sourceDir: File, targetDir: File): Seq[File] = {
- val files = sourceDir ** "*.template"
-
- def changeExtension(f: File): File = {
- val (_, name) = f.getName.reverse.span(_ != '.')
- val strippedName = name.drop(1).reverse.toString
- val newName =
- if (!strippedName.contains(".")) s"$strippedName.scala"
- else strippedName
- new File(f.getParent, newName)
- }
-
- val mapping = (files x rebase(sourceDir, targetDir)).map {
- case (orig, target) ⇒ (orig, changeExtension(target))
- }
-
- mapping foreach {
- case (templateFile, target) ⇒
- if (templateFile.lastModified > target.lastModified) {
- streams.log.info("Generating '%s'" format target.getName)
- val template = IO.read(templateFile)
- IO.write(target, Generator.generateFromTemplate(template, 22))
- } else
- streams.log.debug("Template '%s' older than target. Ignoring." format templateFile.getName)
- }
-
- mapping.map(_._2)
+ val mapping = (files pair rebase(sourceDir, targetDir)).map {
+ case (orig, target) ⇒ (orig, changeExtension(target))
}
+
+ mapping foreach {
+ case (templateFile, target) ⇒
+ if (templateFile.lastModified > target.lastModified) {
+ streams.log.info("Generating '%s'" format target.getName)
+ val template = IO.read(templateFile)
+ IO.write(target, Generator.generateFromTemplate(template, 22))
+ } else
+ streams.log.debug("Template '%s' older than target. Ignoring." format templateFile.getName)
+ }
+
+ mapping.map(_._2)
}
}