apply ddl parser role
[dbsrgits/SQL-Translator-2.0-ish.git] / lib / SQL / Translator / Parser.pm
CommitLineData
4f4fd192 1use MooseX::Declare;
2class SQL::Translator::Parser {
3 use MooseX::Types::Moose qw(Str);
4 use SQL::Translator::Types qw(DBIHandle);
5 use aliased 'SQL::Translator::Object::Schema';
cc73c25e 6
4f4fd192 7 my $apply_role_dbi = sub {
8 my $self = shift;
eba3827b 9 my $role = __PACKAGE__ . '::DBI';
10 Class::MOP::load_class($role);
11 $role->meta->apply($self);
4f4fd192 12 $self->_subclass();
13 };
d6201a5e 14
eba3827b 15 my $apply_role_ddl = sub {
16 my $self = shift;
17 my $role = __PACKAGE__ . '::DDL::' . $self->type;
18 Class::MOP::load_class($role);
19 $role->meta->apply($self);
20 };
d6201a5e 21
4f4fd192 22 has 'dbh' => (
23 isa => DBIHandle,
24 is => 'ro',
25 predicate => 'has_dbh',
26 trigger => $apply_role_dbi,
27 );
d6201a5e 28
4f4fd192 29 has 'filename' => (
30 isa => Str,
31 is => 'ro',
32 predicate => 'has_ddl',
33 trigger => $apply_role_ddl,
34 );
d6201a5e 35
eba3827b 36 has 'type' => (
37 isa => Str,
38 is => 'ro',
39 );
40
4f4fd192 41 method parse {
42 my $schema = Schema->new({ name => $self->schema_name });
43 $self->_add_tables($schema);
44 $schema;
45 }
bab65ec9 46}