let you install to a given point in the version history
[dbsrgits/DBIx-Class-DeploymentHandler.git] / lib / DBIx / Class / DeploymentHandler / Dad.pm
index c5523f8..af14267 100644 (file)
@@ -3,13 +3,14 @@ package DBIx::Class::DeploymentHandler::Dad;
 # ABSTRACT: Parent class for DeploymentHandlers
 
 use Moose;
-use Method::Signatures::Simple;
 require DBIx::Class::Schema;    # loaded for type constraint
 use Carp::Clan '^DBIx::Class::DeploymentHandler';
-use Log::Contextual::WarnLogger;
-use Log::Contextual ':log', -default_logger => Log::Contextual::WarnLogger->new({
-       env_prefix => 'DBICDH'
-});
+use DBIx::Class::DeploymentHandler::Logger;
+use DBIx::Class::DeploymentHandler::Types;
+use Log::Contextual ':log', -package_logger =>
+  DBIx::Class::DeploymentHandler::Logger->new({
+    env_prefix => 'DBICDH'
+  });
 
 has schema => (
   isa      => 'DBIx::Class::Schema',
@@ -33,18 +34,19 @@ sub _build_to_version { $_[0]->schema_version }
 
 has schema_version => (
   is         => 'ro',
-  isa        => 'Str',
+  isa        => 'StrSchemaVersion',
   lazy_build => 1,
 );
 
 sub _build_schema_version { $_[0]->schema->schema_version }
 
-method install {
-  log_info { '[DBICDH] installing version ' . $self->to_version };
+sub install {
+  my $self = shift;
+  log_info { 'installing version ' . $self->to_version };
   croak 'Install not possible as versions table already exists in database'
     if $self->version_storage_is_installed;
 
-  my $ddl = $self->deploy;
+  my $ddl = $self->deploy({version=>$self->to_version});
 
   $self->add_database_version({
     version     => $self->to_version,
@@ -53,11 +55,13 @@ method install {
 }
 
 sub upgrade {
-  log_info { '[DBICDH] upgrading' };
+  log_info { 'upgrading' };
   my $self = shift;
+  my $ran_once = 0;
   while ( my $version_list = $self->next_version_set ) {
+    $ran_once = 1;
     my ($ddl, $upgrade_sql) = @{
-               $self->upgrade_single_step({ version_set => $version_list })
+      $self->upgrade_single_step({ version_set => $version_list })
     ||[]};
 
     $self->add_database_version({
@@ -66,22 +70,28 @@ sub upgrade {
       upgrade_sql => $upgrade_sql,
     });
   }
+
+  log_warn { 'no need to run upgrade' } unless $ran_once;
 }
 
 sub downgrade {
-  log_info { '[DBICDH] upgrading' };
+  log_info { 'downgrading' };
   my $self = shift;
+  my $ran_once = 0;
   while ( my $version_list = $self->previous_version_set ) {
+    $ran_once = 1;
     $self->downgrade_single_step({ version_set => $version_list });
 
     # do we just delete a row here?  I think so but not sure
-    $self->delete_database_version({ version => $version_list->[-1] });
+    $self->delete_database_version({ version => $version_list->[0] });
   }
+  log_warn { 'no version to run downgrade' } unless $ran_once;
 }
 
-method backup {
-  log_info { '[DBICDH] backing up' };
-  $self->storage->backup($self->backup_directory)
+sub backup {
+  my $self = shift;
+  log_info { 'backing up' };
+  $self->schema->storage->backup($self->backup_directory)
 }
 
 __PACKAGE__->meta->make_immutable;