add constraints after all tables are added
[dbsrgits/SQL-Translator-2.0-ish.git] / lib / SQL / Translator / Object.pm
CommitLineData
4f4fd192 1use MooseX::Declare;
035b8503 2class SQL::Translator::Object with SQL::Translator::Object::Compat {
4f4fd192 3 use Tie::IxHash;
8dc32349 4 use MooseX::MultiMethods;
88765147 5 use MooseX::Types::Moose qw(ArrayRef HashRef Str);
8dc32349 6
7 has '_comments' => (
720dcdc3 8 traits => ['Array'],
8dc32349 9 isa => ArrayRef,
a0a9baf5 10 coerce => 1,
720dcdc3 11 handles => {
98cff1fd 12 _comments => 'elements',
720dcdc3 13 add_comment => 'push',
14 remove_last_comment => 'pop',
8dc32349 15 },
16 default => sub { [] },
8dc32349 17 );
18
2850baeb 19 has '_options' => (
720dcdc3 20 traits => ['Array'],
2850baeb 21 isa => ArrayRef,
a0a9baf5 22 coerce => 1,
720dcdc3 23 handles => {
98cff1fd 24 _options => 'elements',
720dcdc3 25 add_option => 'push',
26 remove_last_option => 'pop',
2850baeb 27 },
28 default => sub { [] },
2850baeb 29 );
30
6381c78d 31 has '_extra' => (
720dcdc3 32 traits => ['Hash'],
6381c78d 33 is => 'rw',
34 isa => HashRef,
720dcdc3 35 handles => {
36 exists_extra => 'exists',
37 extra_ids => 'keys',
38 get_extras => 'values',
39 get_extra => 'get',
40 add_extra => 'set',
6381c78d 41 },
42 default => sub { {} },
6381c78d 43 );
44
9479c37a 45 has '_error' => (
aa3b5197 46 is => 'rw',
47 isa => Str
48 );
49
891cdee7 50 multi method comments(Str $comment) { $self->add_comment($comment); $self->comments }
51 multi method comments(ArrayRef $comments) { $self->add_comment($_) for @$comments; $self->comments }
9479c37a 52 multi method comments { wantarray ? $self->_comments : join "\n", $self->_comments }
2850baeb 53
891cdee7 54 multi method options(Str $option) { $self->add_option($option); $self->options }
55 multi method options(ArrayRef $options) { $self->add_option($_) for @$options; $self->options }
9479c37a 56 multi method options { wantarray ? $self->_options : $self->_options }
6381c78d 57
ef79fbfb 58 multi method extra(Str $extra) { $self->get_extra($extra) }
59 multi method extra(HashRef $extra) { $self->add_extra($_, $extra->{$_}) for keys %$extra; $self->extra }
9479c37a 60 multi method extra { wantarray ? %{$self->_extra} : $self->_extra }
66cf0711 61
62 around BUILDARGS(ClassName $self: @args) {
63 my $args = $self->$orig(@args);
64
65 $args->{_comments} = delete $args->{comments} || [];
66 $args->{_options} = delete $args->{options} || [];
67 $args->{_extra} = delete $args->{extra} || {};
68
69 return $args;
70 }
4f4fd192 71}