use Digest::SHA1 for sha1_hex
[dbsrgits/SQL-Translator-2.0-ish.git] / lib / SQL / Translator / Parser.pm
index 1075a1f..f825bb3 100644 (file)
@@ -1,36 +1,43 @@
 use MooseX::Declare;
 class SQL::Translator::Parser {
-    use MooseX::Types::Moose qw(Str);
-    use SQL::Translator::Types qw(DBIHandle);
-    use aliased 'SQL::Translator::Object::Schema';
-
-    my $apply_role_dbi = sub {
-        my $self = shift;
-        my $class = __PACKAGE__ . '::DBI';
-        Class::MOP::load_class($class);
-        $class->meta->apply($self);
-        $self->_subclass();
-    };
-
-    my $apply_role_ddl = sub { };
+    use MooseX::Types::Moose qw(Maybe Str);
+    use SQL::Translator::Types qw(DBIHandle Translator);
 
     has 'dbh' => (
         isa => DBIHandle,
         is => 'ro',
         predicate => 'has_dbh',
-        trigger => $apply_role_dbi,
     );
 
     has 'filename' => (
         isa => Str,
         is => 'ro',
         predicate => 'has_ddl',
-        trigger => $apply_role_ddl,
     );
 
-    method parse {
-        my $schema = Schema->new({ name => $self->schema_name });
-        $self->_add_tables($schema);
-        $schema;
+    has 'type' => (
+        isa => Maybe[Str],
+        is => 'ro',
+        predicate => 'has_type',
+    );
+
+    has 'translator' => (
+        isa => Translator,
+        is => 'ro',
+        weak_ref => 1,
+        required => 1,
+        handles => [ qw(schema) ],
+    );
+
+    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();
     }
 }