lets remove that extra ;
[dbsrgits/SQL-Translator-2.0-ish.git] / lib / SQL / Translator.pm
index 55b555d..3fbb0e7 100644 (file)
@@ -2,19 +2,22 @@ use MooseX::Declare;
 class SQL::Translator {
     use TryCatch;
     use MooseX::Types::Moose qw(Bool HashRef Int Str Undef);
+    use MooseX::Aliases;
     use SQL::Translator::Types qw(DBIHandle Parser Producer Schema);
     use SQL::Translator::Object::Schema;
 
+    our $VERSION = '0.001';
+
     has 'parser' => (
         isa => Str,
         is => 'rw',
-        init_arg => 'from',
+        alias => 'from',
     );
     
     has 'producer' => (
         isa => Str,
         is => 'rw',
-        init_arg => 'to',
+        alias => 'to',
     );
     
     has '_parser' => (
@@ -22,6 +25,7 @@ class SQL::Translator {
         is => 'rw',
         lazy_build => 1,
         handles => [ qw(parse) ],
+        predicate => 'has_parser',
     );
     
     has '_producer' => (
@@ -29,6 +33,7 @@ class SQL::Translator {
         is => 'rw',
         lazy_build => 1,
         handles => [ qw(produce) ],
+        predicate => 'has_producer',
     );
     
     has 'dbh' => (
@@ -41,6 +46,7 @@ class SQL::Translator {
         isa => Schema,
         is => 'rw',
         lazy => 1,
+        clearer => '_clear_schema',
         default => sub { SQL::Translator::Object::Schema->new },
     );
 
@@ -65,6 +71,12 @@ class SQL::Translator {
     has 'version' => (isa => Str, is => 'rw');
     has 'filename' => (isa => Str, is => 'rw');
 
+    has '_producer_mapping' => (
+        isa => HashRef,
+        is => 'ro',
+        default => sub { { MySQL => 'SQL::MySQL', SQLite => 'SQL::SQLite', PostgreSQL => 'SQL::PostgreSQL', XML => 'XML', YAML => 'YAML' } }
+    );
+
     method _build__parser {
         my $class = 'SQL::Translator::Parser';
     
@@ -81,16 +93,13 @@ class SQL::Translator {
     }
     
     method _build__producer {
+        my $mapping = $self->_producer_mapping;
+
         my $class = 'SQL::Translator::Producer';
-        my $role = $class . '::' . $self->producer;
+        my $role = $class . '::' . $mapping->{$self->producer};
 
         Class::MOP::load_class($class);
-        try {
-            Class::MOP::load_class($role)
-        } catch ($e) {
-            $role = $class . '::SQL::' . $self->producer;
-            Class::MOP::load_class($role)
-        }
+        Class::MOP::load_class($role);
     
         my $producer = $class->new({ translator => $self });
         $role->meta->apply($producer);
@@ -101,7 +110,9 @@ class SQL::Translator {
     method translate(:$data, :$producer?, :$producer_args?, :$parser?, :$parser_args?) {
         my $return;
 
-        $parser ||= $self->parser;
+        $self->_clear_schema if defined $parser;
+
+        $parser ||= $self->parser unless $self->has_parser;
         if (defined $parser) {
             $self->_clear_parser;
             $self->parser($parser);
@@ -109,7 +120,7 @@ class SQL::Translator {
             $return = $self->schema;
         }
 
-        $producer ||= $self->producer;
+        $producer ||= $self->producer unless $self->has_producer;
         if (defined $producer) {
             $self->_clear_producer;
             $self->producer($producer);