Commit | Line | Data |
4f4fd192 |
1 | use MooseX::Declare; |
035b8503 |
2 | class SQL::Translator::Object with SQL::Translator::Object::Compat { |
4f4fd192 |
3 | use Tie::IxHash; |
8dc32349 |
4 | use MooseX::MultiMethods; |
6381c78d |
5 | use MooseX::Types::Moose qw(Any 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 | } |