DBIx-Class-StateMigrations
view release on metacpan or search on metacpan
lib/DBIx/Class/StateMigrations.pm view on Meta::CPAN
package DBIx::Class::StateMigrations;
use strict;
use warnings;
# ABSTRACT: Schema migrations via checksums instead of versions
our $VERSION = '0.002';
use Moo;
use Types::Standard qw(:all);
use Scalar::Util 'blessed';
use Try::Tiny;
use Class::Unload;
use Class::Inspector;
use Path::Class qw/file dir/;
use DBIx::Class::Schema::Diff 1.11;
use DBIx::Class::Schema::Diff::State;
use DBIx::Class::StateMigrations::SchemaState;
use DBIx::Class::StateMigrations::Migration;
sub BUILD {
my $self = shift;
try{$self->connected_schema->storage->connected} or die join('',
'Supplied connected_schema "', $self->connected_schema, '" is not connected'
);
}
sub load_migrations {
my $self = shift;
$self->_validate_Migrations
}
sub load_current_state {
my $self = shift;
$self->current_SchemaState
}
sub has_matched_migration {
my $self = shift;
$self->matched_Migration ? 1 : 0
}
sub num_migrations { scalar(@{ (shift)->Migrations }) }
sub all_migrations { @{ (shift)->Migrations } }
sub execute_matched_Migration_routines {
my $self = shift;
my $callback = shift;
my $Migration = $self->matched_Migration or die join('',
'execute_matched_Migration(): no migration matched'
);
$Migration->execute_routines( $self->connected_schema, $callback )
}
has '__loaded_vagrant_classes', is => 'ro', isa => HashRef, default => sub {{}};
has 'migrations_dir', is => 'ro', default => sub { undef };
has 'connected_schema', is => 'ro', required => 1, isa => InstanceOf['DBIx::Class::Schema'];
has 'DBI_Driver_Name', is => 'ro', init_arg => undef, lazy => 1, default => sub {
my $self = shift;
$self->connected_schema->storage->dbh->{Driver}{Name}
}, isa => Str;
has 'schema_class', is => 'ro', lazy => 1, init_arg => 1, default => sub {
my $self = shift;
blessed $self->connected_schema ? blessed $self->connected_schema : $self->connected_schema
};
has 'loader_options', is => 'ro', default => sub {{
naming => { ALL => 'v7'},
use_namespaces => 1,
use_moose => 0,
debug => 0,
qualify_objects => 1
}}, isa => HashRef;
has 'diff_filters', is => 'ro', default => sub {[
filter_out => 'isa'
]}, isa => ArrayRef;
has 'Migrations', is => 'ro', lazy => 1, default => sub {
my $self = shift;
if(my $dir = $self->migrations_dir) {
my $Dir = dir( $dir )->absolute;
-d $Dir or die "migrations dir '$dir' not found or is not a directory";
my @migrations = ();
local $DBIx::Class::StateMigrations::Migration::LOADED_MIGRATION_SUBCLASSES = $self->__loaded_vagrant_classes;
for my $m_dir ($Dir->children) {
next unless $m_dir->is_dir;
my $Migration = DBIx::Class::StateMigrations::Migration
->new_from_migration_dir($m_dir->absolute->stringify,$self->DBI_Driver_Name);
push @migrations, $Migration if ($Migration);
}
return \@migrations;
}
else {
return []
}
}, isa => ArrayRef[InstanceOf[
'DBIx::Class::StateMigrations::Migration',
'DBIx::Class::StateMigrations::Migration::Invalid'
]];
sub _validate_Migrations {
my $self = shift;
my (@good,@warns,@dies);
my @all = $self->all_migrations;
( run in 0.631 second using v1.01-cache-2.11-cpan-39bf76dae61 )