Skip to content

Commit

Permalink
allow for different transformations for ups and downs
Browse files Browse the repository at this point in the history
  • Loading branch information
davidpeklak committed Oct 27, 2014
1 parent d51eb22 commit 9bf4723
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 19 deletions.
8 changes: 4 additions & 4 deletions src/main/scala/smt/MigrationHandling.scala
Expand Up @@ -9,16 +9,16 @@ 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 transformGroup(downTs: Seq[Transformation], upTs: Seq[Transformation])(group: Group): Group = {
group.copy(ups = transformScripts(upTs)(group.ups), downs = transformScripts(downTs)(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] = {
ms.map(m => m.copy(groups = m.groups.map(transformGroup(ts))))
def transformedMigrationsImpl(ms: Seq[Migration], downTs: Seq[Transformation], upTs: Seq[Transformation]): Seq[Migration] = {
ms.map(m => m.copy(groups = m.groups.map(transformGroup(downTs, upTs))))
}

def showHashesImpl(ms: Seq[Migration], s: TaskStreams): Unit = {
Expand Down
2 changes: 1 addition & 1 deletion src/main/scala/smt/SMT.scala
Expand Up @@ -19,7 +19,7 @@ object SMT extends Plugin {
)

lazy val smtSettings = Seq(
transformedMigrations <<= (migrations, transformations) map transformedMigrationsImpl,
transformedMigrations <<= (migrations, transformations, transformations) map transformedMigrationsImpl,
showHashes <<= (transformedMigrations, streams) map showHashesImpl,
showDbState <<= (database, transformedMigrations, streams) map SMTImpl.showDbState,
// applyMigrations <<= (database, transformedMigrations, allowRollback, runTests, reporters, user, streams) map SMTImpl.applyMigrations,
Expand Down
29 changes: 15 additions & 14 deletions src/main/scala/smt/migration/SchemaMigration.scala
Expand Up @@ -7,27 +7,28 @@ import smt.MigrationHandling

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

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

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

def apply(name: String, dirs: Seq[File], tests: Seq[Test]): Migration = {
apply(name, dirs, tests, ClassicDirCrawler, OneFileOneScriptSplitter, identity)
apply(name, dirs, tests, ClassicDirCrawler, OneFileOneScriptSplitter, identity,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
transformation: String => String // a specific transformation of scripts for this migration
downTransformation: String => String, // a specific transformation of down scripts for this migration
upTransformation: String => String // a specific transformation of up scripts for this migration
): Migration = {
IO.assertDirectories(dirs: _*)

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

groups.map(MigrationHandling.transformGroup(Seq(transformation)))
groups.map(MigrationHandling.transformGroup(Seq(downTransformation), Seq(upTransformation)))
}

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

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

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

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

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

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

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

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

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

0 comments on commit 9bf4723

Please sign in to comment.