Skip to content

Commit

Permalink
introduce migration-specific script transformations
Browse files Browse the repository at this point in the history
  • Loading branch information
davidpeklak committed Sep 26, 2014
1 parent d9a3676 commit 4b05bb2
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 19 deletions.
15 changes: 10 additions & 5 deletions src/main/scala/smt/MigrationHandling.scala
Expand Up @@ -4,16 +4,21 @@ import sbt.Keys._
import java.security.MessageDigest
import smt.util.Util
import Util._
import smt.migration.{Script, Migration}
import smt.migration.{Script, Migration, Group}

object MigrationHandling {
type Transformation = String => String

def transformGroup(ts: Seq[Transformation])(group: Group): Group = {
group.copy(ups = transformScripts(ts)(group.ups), downs = transformScripts(ts)(group.downs))
}

def transformScripts(ts: Seq[Transformation])(ss: Seq[Script]): Seq[Script] = ss.map(s => {
ts.foldLeft(s)((s, t) => s.copy(content = t(s.content)))
})

def transformedMigrationsImpl(ms: Seq[Migration], ts: Seq[Transformation]): Seq[Migration] = {
def transformScripts(ss: Seq[Script]): Seq[Script] = ss.map(s => {
ts.foldLeft(s)((s, t) => s.copy(content = t(s.content)))
})
ms.map(m => m.copy(groups = m.groups.map( group => group.copy(ups = transformScripts(group.ups), downs = transformScripts(group.downs)))))
ms.map(m => m.copy(groups = m.groups.map(transformGroup(ts))))
}

def showHashesImpl(ms: Seq[Migration], s: TaskStreams): Unit = {
Expand Down
30 changes: 16 additions & 14 deletions src/main/scala/smt/migration/SchemaMigration.scala
Expand Up @@ -3,29 +3,31 @@ package smt.migration
import sbt._
import FileSplitters._
import DirCrawlers._
import smt.MigrationHandling

object SchemaMigration {
def apply(name: String, dir: File): Migration = {
apply(name, Seq(dir), Seq(), ClassicDirCrawler, OneFileOneScriptSplitter)
apply(name, Seq(dir), Seq(), ClassicDirCrawler, OneFileOneScriptSplitter, identity)
}

def apply(name: String, dirs: Seq[File]): Migration = {
apply(name, dirs, Seq(), ClassicDirCrawler, OneFileOneScriptSplitter)
apply(name, dirs, Seq(), ClassicDirCrawler, OneFileOneScriptSplitter, identity)
}

def apply(name: String, dir: File, tests: Seq[Test]): Migration = {
apply(name, Seq(dir), tests, ClassicDirCrawler, OneFileOneScriptSplitter)
apply(name, Seq(dir), tests, ClassicDirCrawler, OneFileOneScriptSplitter, identity)
}

def apply(name: String, dirs: Seq[File], tests: Seq[Test]): Migration = {
apply(name, dirs, tests, ClassicDirCrawler, OneFileOneScriptSplitter)
apply(name, dirs, tests, ClassicDirCrawler, OneFileOneScriptSplitter, identity)
}

def apply(name: String,
dirs: Seq[File],
tests: Seq[Test],
dirCrawler: File => Seq[File], // takes a directory and returns a sequence of subdirectories where the files are expected
fileSplitter: File => Seq[Script] // takes a file and splits it into a sequence of scripts
fileSplitter: File => Seq[Script], // takes a file and splits it into a sequence of scripts
transformation: String => String // a specific transformation of scripts for this migration
): Migration = {
IO.assertDirectories(dirs: _*)

Expand All @@ -52,7 +54,7 @@ object SchemaMigration {
case (upFile, downFile) => Group(ups = fileSplitter(upFile), downs = fileSplitter(downFile).reverse)
}

groups
groups.map(MigrationHandling.transformGroup(Seq(transformation)))
}

def listFilesAlphabetically(dir: File): Seq[File] = {
Expand All @@ -72,36 +74,36 @@ object SchemaMigration {

object SepSchemaMigration {
def apply(sep: String, name: String, dir: File): Migration = {
SchemaMigration(name, Seq(dir), Seq(), ClassicDirCrawler, OneFileManyScriptsSplitter("\n" + sep))
SchemaMigration(name, Seq(dir), Seq(), ClassicDirCrawler, OneFileManyScriptsSplitter("\n" + sep), identity)
}

def apply(sep: String, name: String, dirs: Seq[File]): Migration = {
SchemaMigration(name, dirs, Seq(), ClassicDirCrawler, OneFileManyScriptsSplitter("\n" + sep))
SchemaMigration(name, dirs, Seq(), ClassicDirCrawler, OneFileManyScriptsSplitter("\n" + sep), identity)
}

def apply(sep: String, name: String, dir: File, tests: Seq[Test]): Migration = {
SchemaMigration(name, Seq(dir), tests, ClassicDirCrawler, OneFileManyScriptsSplitter("\n" + sep))
SchemaMigration(name, Seq(dir), tests, ClassicDirCrawler, OneFileManyScriptsSplitter("\n" + sep), identity)
}

def apply(sep: String, name: String, dirs: Seq[File], tests: Seq[Test]): Migration = {
SchemaMigration(name, dirs, tests, ClassicDirCrawler, OneFileManyScriptsSplitter("\n" + sep))
SchemaMigration(name, dirs, tests, ClassicDirCrawler, OneFileManyScriptsSplitter("\n" + sep), identity)
}
}

object OneDirSepSchemaMigration {
def apply(sep: String, name: String, dir: File): Migration = {
SchemaMigration(name, Seq(dir), Seq(), IdentityDirCrawler, OneFileManyScriptsSplitter("\n" + sep))
SchemaMigration(name, Seq(dir), Seq(), IdentityDirCrawler, OneFileManyScriptsSplitter("\n" + sep), identity)
}

def apply(sep: String, name: String, dirs: Seq[File]): Migration = {
SchemaMigration(name, dirs, Seq(), IdentityDirCrawler, OneFileManyScriptsSplitter("\n" + sep))
SchemaMigration(name, dirs, Seq(), IdentityDirCrawler, OneFileManyScriptsSplitter("\n" + sep), identity)
}

def apply(sep: String, name: String, dir: File, tests: Seq[Test]): Migration = {
SchemaMigration(name, Seq(dir), tests, IdentityDirCrawler, OneFileManyScriptsSplitter("\n" + sep))
SchemaMigration(name, Seq(dir), tests, IdentityDirCrawler, OneFileManyScriptsSplitter("\n" + sep), identity)
}

def apply(sep: String, name: String, dirs: Seq[File], tests: Seq[Test]): Migration = {
SchemaMigration(name, dirs, tests, IdentityDirCrawler, OneFileManyScriptsSplitter("\n" + sep))
SchemaMigration(name, dirs, tests, IdentityDirCrawler, OneFileManyScriptsSplitter("\n" + sep), identity)
}
}

0 comments on commit 4b05bb2

Please sign in to comment.