Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env perl
- use strict;
- use warnings;
- use File::Spec;
- use Freestock::Web;
- use SQL::Translator;
- use DBIx::Class::DeploymentHandler;
- use DBIx::Class::Fixtures;
- my $schema = Freestock::Web->model('Schema')->schema;
- my $dh = DBIx::Class::DeploymentHandler->new({
- schema => $schema,
- databases => [qw/SQLite PostgreSQL MySQL/],
- script_directory => Freestock::Web->path_to('share','migrations')->stringify,
- sql_translator_args => { add_drop_table => 0 },
- });
- sub dump_fixtures {
- my $fixtures_dir = Freestock::Web->config->{fixtures_dir};
- my $config_dir = Freestock::Web->path_to('share', 'migrations', 'fixture_configs');
- my @configs = map { $_->basename } grep { -f $_ } $config_dir->children;
- for my $config (@configs) {
- next unless $config=~/json$/;
- my $directory = File::Spec->catdir($fixtures_dir, $dh->database_version, $config);
- print "Dumping $config to $directory\n";
- DBIx::Class::Fixtures
- ->new({
- config_dir => $config_dir,
- })->dump({
- config => $config,
- schema => $schema->clone,
- directory => $directory,
- });
- }
- }
- sub populate_db {
- my $fixtures_dir = Freestock::Web->config->{fixtures_dir};
- my $fixtures = DBIx::Class::Fixtures->new({
- config_dir => Freestock::Web->path_to('share', 'migrations', 'fixture_configs'),
- });
- $fixtures->populate({
- no_deploy => 1,
- schema => $schema,
- directory => $fixtures_dir,
- });
- }
- sub prepare_install {
- $dh->prepare_install;
- }
- sub current_version {
- print $dh->database_version ."\n";
- }
- sub generate_diagram {
- print "Generating diagram of schema...";
- SQL::Translator->new(
- parser => 'SQL::Translator::Parser::DBIx::Class',
- parser_args => {
- package => $schema,
- },
- to => 'GraphViz',
- producer_args => {
- out_file => Freestock::Web->path_to('share','migrations','schema_v'.$dh->database_version.'.png'),
- width => 48.0,
- height => 33.3,
- pagewidth => 48.6,
- pageheight => 34.2,
- show_constraints => 1,
- show_datatypes => 1,
- show_sizes => 1,
- layout => 'dot',
- },
- )->translate;
- print "DONE!\n";
- }
- sub help {
- print <<'OUT';
- usage:
- prepare-install
- install
- populate
- dump-fixtures
- version
- generate-diagram
- OUT
- }
- if(my $cmd = $ARGV[0]) {
- if($cmd eq 'prepare-install') {
- prepare_install();
- } elsif($cmd eq 'install') {
- $dh->install;
- } elsif($cmd eq 'generate-diagram') {
- generate_diagram();
- } elsif($cmd eq 'dump-fixtures') {
- dump_fixtures();
- } elsif($cmd eq 'populate') {
- populate_db();
- } elsif($cmd eq 'version') {
- print "The Database is at version: ". $dh->database_version. "\n";
- } elsif($cmd eq 'upgrade') {
- $dh->upgrade;
- } else {
- help();
- }
- } else {
- help();
- }
- __END__
- my $version = $dh->database_version;
- print "Preparing $version";
- if ( $version >= 1 ) {
- $dh->prepare_upgrade({
- from_version => $version,
- to_version => $version+1,
- });
- $dh->prepare_downgrade({
- from_version => $version+1,
- to_version => $version,
- });
- }
Add Comment
Please, Sign In to add comment