X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FSQL%2FTranslator%2FParser.pm;h=f825bb33c9f8c495b6e379da9a258e3b2021b1f0;hb=4bee0b67a12094c577f2d7d96906fb8f94eb4635;hp=7346c3bbeb7a67ec1be5f9160d8d0ef5cbc3a3d5;hpb=a4b70d7a47fad9f88ef4347f506fc91c800a79b5;p=dbsrgits%2FSQL-Translator-2.0-ish.git diff --git a/lib/SQL/Translator/Parser.pm b/lib/SQL/Translator/Parser.pm index 7346c3b..f825bb3 100644 --- a/lib/SQL/Translator/Parser.pm +++ b/lib/SQL/Translator/Parser.pm @@ -1,47 +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 $role = __PACKAGE__ . '::DBI'; - Class::MOP::load_class($role); - $role->meta->apply($self); - $self->_subclass(); - }; - - my $apply_role_ddl = sub { - my $self = shift; - my $role = __PACKAGE__ . '::DDL'; - Class::MOP::load_class($role); - $role->meta->apply($self); - $self->_subclass(); - }; + 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, ); has 'type' => ( - isa => Str, + isa => Maybe[Str], + is => 'ro', + predicate => 'has_type', + ); + + has 'translator' => ( + isa => Translator, is => 'ro', + weak_ref => 1, + required => 1, + handles => [ qw(schema) ], ); - method parse { - my $schema = Schema->new({ name => $self->schema_name }); - $self->_add_tables($schema); - $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(); } }