1 package DBIx::Class::DeploymentHandler::VersionHandler::ExplicitVersions;
5 with 'DBIx::Class::DeploymentHandler::HandlesVersioning';
7 has schema_version => (
13 has database_version => (
19 has to_version => ( # configuration
21 lazy_build => 1, # builder comes from another role...
22 # which is... probably not how we want it
25 sub _build_to_version { $_[0]->schema_version }
27 has ordered_versions => (
32 my $to_version = $_[0]->to_version;
33 my $db_version = $_[0]->database_version;
35 croak 'to_version not in ordered_versions'
36 unless grep { $to_version eq $_ } @{ $_[1] };
38 croak 'database_version not in ordered_versions'
39 unless grep { $db_version eq $_ } @{ $_[1] };
42 return if $_ eq $db_version;
43 croak 'to_version is before database version in ordered_versions'
55 sub _inc_version_idx { $_[0]->_version_idx($_[0]->_version_idx + 1 ) }
57 sub _build__version_idx {
59 my $start = $self->database_version;
61 for (@{$self->ordered_versions}) {
63 if $_ eq $self->database_version;
68 sub next_version_set {
71 if $self->ordered_versions->[$self->_version_idx] eq $self->to_version;
73 # this should never get in infinite loops because we ensure
74 # that the database version is in the list in the version_idx
76 my $next_idx = $self->_inc_version_idx;
78 $self->ordered_versions->[$next_idx - 1],
79 $self->ordered_versions->[$next_idx ],
83 __PACKAGE__->meta->make_immutable;
89 vim: ts=2 sw=2 expandtab