diff options
author | Johannes Rudolph <johannes.rudolph@gmail.com> | 2016-03-01 14:29:56 +0100 |
---|---|---|
committer | Johannes Rudolph <johannes.rudolph@gmail.com> | 2016-03-01 14:29:56 +0100 |
commit | 11b21a1042dd4bb5007ff3e7eaf18b5e7dbdf8dd (patch) | |
tree | 4be31196b4b1ede766c3069ef0e374b9ef4f7037 /src/main/scala | |
parent | 6ccb744c22c767df71b74cccc19fef31fb790e7c (diff) | |
download | sbt-boilerplate-11b21a1042dd4bb5007ff3e7eaf18b5e7dbdf8dd.tar.gz sbt-boilerplate-11b21a1042dd4bb5007ff3e7eaf18b5e7dbdf8dd.tar.bz2 sbt-boilerplate-11b21a1042dd4bb5007ff3e7eaf18b5e7dbdf8dd.zip |
make this an AutoPlugin, fixes #19
Diffstat (limited to 'src/main/scala')
-rw-r--r-- | src/main/scala/spray/boilerplate/BoilerplatePlugin.scala | 85 |
1 files changed, 45 insertions, 40 deletions
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) } } |