use Digest::SHA1 for sha1_hex
[dbsrgits/SQL-Translator-2.0-ish.git] / lib / SQL / Translator / Parser.pm
index 4f4aa3f..f825bb3 100644 (file)
@@ -1,43 +1,43 @@
-package SQL::Translator::Parser;
-use Moose;
-use MooseX::Types::Moose qw(Str);
-use SQL::Translator::Types qw(DBIHandle);
-#extends 'SQL::Translator';
+use MooseX::Declare;
+class SQL::Translator::Parser {
+    use MooseX::Types::Moose qw(Maybe Str);
+    use SQL::Translator::Types qw(DBIHandle Translator);
 
-my $apply_role_dbi = sub {
-    my $self = shift;
-    my $class = __PACKAGE__ . '::DBI';
-    Class::MOP::load_class($class);
-    $class->meta->apply($self);
-    $self->_subclass();
-};
+    has 'dbh' => (
+        isa => DBIHandle,
+        is => 'ro',
+        predicate => 'has_dbh',
+    );
 
-my $apply_role_ddl = sub { };
+    has 'filename' => (
+        isa => Str,
+        is => 'ro',
+        predicate => 'has_ddl',
+    );
 
-has 'dbh' => (
-    isa => DBIHandle,
-    is => 'ro',
-    predicate => 'has_dbh',
-    trigger => $apply_role_dbi,
-);
+    has 'type' => (
+        isa => Maybe[Str],
+        is => 'ro',
+        predicate => 'has_type',
+    );
 
-has 'ddl' => (
-    isa => Str,
-    is => 'ro',
-    predicate => 'has_ddl',
-    trigger => $apply_role_ddl,
-);
+    has 'translator' => (
+        isa => Translator,
+        is => 'ro',
+        weak_ref => 1,
+        required => 1,
+        handles => [ qw(schema) ],
+    );
 
-sub BUILD {}
-
-after BUILD => sub {
-    my $self = shift;
-    my $schema = SQL::Translator::Object::Schema->new({ name => $self->schema_name });
-    $self->_add_tables($schema);
-    use Data::Dumper;
-    print Dumper($schema);
-};
-
-no Moose;
-__PACKAGE__->meta->make_immutable;
-1;
+    method BUILD(@) {
+        my $role = __PACKAGE__;
+        if ($self->has_dbh) {
+            $role .= '::DBI';
+        } elsif ($self->has_type || $self->has_ddl) {
+            $role .= '::DDL';
+        }
+        Class::MOP::load_class($role);
+        $role->meta->apply($self);
+        $self->_subclass();
+    }
+}