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 )