return values when using native traits
[dbsrgits/SQL-Translator-2.0-ish.git] / lib / SQL / Translator / Object / Trigger.pm
CommitLineData
4f4fd192 1use MooseX::Declare;
ebf2721d 2class SQL::Translator::Object::Trigger extends SQL::Translator::Object {
160f1f55 3 use MooseX::Types::Moose qw(Any ArrayRef HashRef Int Str);
37ae885e 4 use MooseX::MultiMethods;
a499b4bd 5 use SQL::Translator::Types qw(Column Schema Table ColumnHash IxHash);
6 use Tie::IxHash;
37ae885e 7
8 has 'schema' => (
9 is => 'rw',
10 isa => Schema,
11 weak_ref => 1,
12 );
13
14 has 'table' => (
15 is => 'rw',
16 isa => Table,
17 weak_ref => 1,
18 );
19
4f4fd192 20 has 'name' => (
21 is => 'ro',
22 isa => Str,
23 required => 1
24 );
3fb92fdf 25
26 has 'columns' => (
3fb92fdf 27 is => 'rw',
a499b4bd 28 isa => IxHash, #ColumnHash,
28bd628e 29 handles => {
a499b4bd 30 exists_column => 'EXISTS',
31 column_ids => 'Keys',
32 get_columns => 'Values',
33 get_column => 'FETCH',
34 add_column => 'STORE',
35 remove_column => 'DELETE',
36 clear_columns => 'CLEAR',
3fb92fdf 37 },
a499b4bd 38 coerce => 1,
39 default => sub { Tie::IxHash->new() }
3fb92fdf 40 );
41
42 has 'on_table' => (
43 is => 'rw',
44 isa => Str,
37ae885e 45 required => 1,
46# trigger => sub { my ($self, $new, $old) = @_; $self->table($self->schema->get_table($new)) },
3fb92fdf 47 );
48
49 has 'action' => (
50 is => 'rw',
c53f9843 51 isa => Any
3fb92fdf 52 );
53
54 has 'perform_action_when' => (
55 is => 'rw',
56 isa => Str,
57 required => 1
58 );
59
37ae885e 60 has '_database_events' => (
37ae885e 61 traits => ['Array'],
3fb92fdf 62 isa => ArrayRef,
37ae885e 63 handles => {
8bc0d91f 64 _database_events => 'elements',
f2600b26 65 add_database_event => 'push',
37ae885e 66 remove_last_database_option => 'pop',
67 },
68 default => sub { [] },
69 required => 1,
3fb92fdf 70 );
71
160f1f55 72 has '_order' => (
73 isa => Int,
74 is => 'rw',
75 );
76
00e28941 77 around add_column(Column $column) {
78 $self->$orig($column->name, $column);
79 return $self->get_column($column->name);
80 }
37ae885e 81
82 multi method database_events(Str $database_event) { $self->add_database_event($database_event); $self->database_events }
83 multi method database_events(ArrayRef $database_events) { $self->add_database_event($_) for @$database_events; $self->database_events }
5b7d1de7 84 multi method database_events { $self->_database_events }
317464b5 85
160f1f55 86 multi method order(Int $order) { $self->_order($order); }
87 multi method order {
88 my $order = $self->_order;
89 unless (defined $order && $order) {
90 my $triggers = Tie::IxHash->new( map { $_->name => $_ } $self->schema->get_triggers );
91 $order = $triggers->Indices($self->name) || 0; $order++;
92 $self->_order($order);
93 }
94 return $order;
95 }
96
317464b5 97 method is_valid { 1 }
b1001491 98
99 around BUILDARGS(ClassName $self: @args) {
100 my $args = $self->$orig(@args);
101
05e37c4f 102 my $database_events = delete $args->{database_events};
103 $args->{_database_events} = ref $database_events ? $database_events : [ $database_events ];
b1001491 104
105 return $args;
106 }
4f4fd192 107}