Anego

 view release on metacpan or  search on metacpan

lib/Anego/Task/SchemaLoader.pm  view on Meta::CPAN

package Anego::Task::SchemaLoader;
use strict;
use warnings;
use utf8;
use Digest::MD5 qw/ md5_hex /;
use SQL::Translator;

use Anego::Config;
use Anego::Git;
use Anego::Logger;

sub from {
    my $class  = shift;
    my $method = lc(shift || 'latest');
    my @args   = @_;

    unless ($class->can($method)) {
        errorf("Could not use method: %s\n", $method);
    }

    return $class->$method(@args);
}

sub revision {
    my ($class, $revision) = @_;
    my $config = Anego::Config->load;

    my $schema_class = $config->schema_class;
    my $schema_str   = git_cat_file(sprintf('%s:%s', $revision, $config->schema_path));

    my $ddl = _load_ddl_from_schema_string($schema_class, $schema_str);

    my $tr = SQL::Translator->new(
        parser => $config->rdbms,
        data   => \$ddl,
    );
    $tr->translate;
    return _filter($tr);
}

sub latest {
    my ($class) = @_;
    my $config = Anego::Config->load;

    my $schema_class = $config->schema_class;
    my $schema_path  = $config->schema_path;

    errorf("Could not find schema class file: $schema_path") unless -f $schema_path;

    open my $fh, '<', $schema_path or errorf("Failed to open: $!");
    my $schema_str = do { local $/; <$fh> };
    close $fh;

    my $ddl = _load_ddl_from_schema_string($schema_class, $schema_str);

    my $tr = SQL::Translator->new(
        parser => $config->rdbms,
        data   => \$ddl,
    );
    $tr->translate;
    return _filter($tr);
}

sub database {



( run in 0.620 second using v1.01-cache-2.11-cpan-75ffa21a3d4 )