more todo
[dbsrgits/DBIx-Class-DeploymentHandler.git] / lib / DBIx / Class / DeploymentHandler / Dad.pm
CommitLineData
c4f4d4a2 1package DBIx::Class::DeploymentHandler::Dad;
2
3use Moose;
4use Method::Signatures::Simple;
5use DBIx::Class::DeploymentHandler::Types;
6require DBIx::Class::Schema; # loaded for type constraint
7require DBIx::Class::ResultSet; # loaded for type constraint
8use Carp::Clan '^DBIx::Class::DeploymentHandler';
9
10has schema => (
11 isa => 'DBIx::Class::Schema',
12 is => 'ro',
13 required => 1,
14 handles => ['schema_version'],
15);
16
17has upgrade_directory => ( # configuration
18 isa => 'Str',
19 is => 'ro',
20 required => 1,
21 default => 'sql',
22);
23
24has backup_directory => ( # configuration
25 isa => 'Str',
26 is => 'ro',
27 predicate => 'has_backup_directory',
28);
29
30has to_version => ( # configuration
31 is => 'ro',
32 lazy_build => 1,
33);
34
35sub _build_to_version { $_[0]->schema->schema_version }
36
37has databases => ( # configuration
38 coerce => 1,
39 isa => 'DBIx::Class::DeploymentHandler::Databases',
40 is => 'ro',
41 default => sub { [qw( MySQL SQLite PostgreSQL )] },
42);
43
44has sqltargs => ( # configuration
45 isa => 'HashRef',
46 is => 'ro',
47 default => sub { {} },
48);
49
50method install {
51 croak 'Install not possible as versions table already exists in database'
52 if $self->version_storage_is_installed;
53
54 my $ddl = $self->_deploy;
55
56 $self->version_storage->add_database_version({
57 version => $self->to_version,
58 ddl => $ddl,
59 });
60}
61
62sub upgrade {
63 my $self = shift;
64 while ( my $version_list = $self->next_version_set ) {
65 $self->_upgrade_single_step($version_list);
66
67 $self->add_database_version({
68 version => $version_list->[-1],
69 # ddl => $ddl,
70 # upgrade_sql => $upgrade_sql,
71 });
72 }
73}
74
75method backup { $self->storage->backup($self->backup_directory) }
76
77__PACKAGE__->meta->make_immutable;
78
791;
80
81=pod
82
83=attr schema
84
85=attr upgrade_directory
86
87=attr backup_directory
88
89=attr to_version
90
91=attr databases
92
93=method install
94
95=method upgrade
96
97=method backup
98
99__END__
100
101vim: ts=2 sw=2 expandtab