6d869cefa1b7d9e0fcc7c2a24aeeddabdf0333db
[dbsrgits/SQL-Translator-2.0-ish.git] / lib / SQL / Translator / Object / Trigger.pm
1 use MooseX::Declare;
2 class SQL::Translator::Object::Trigger extends SQL::Translator::Object {
3     use MooseX::Types::Moose qw(Any ArrayRef HashRef Str);
4     use MooseX::MultiMethods;
5     use SQL::Translator::Types qw(Column Schema Table);
6
7     has 'schema' => (
8         is => 'rw',
9         isa => Schema,
10         weak_ref => 1,
11     );
12
13     has 'table' => (
14         is => 'rw',
15         isa => Table,
16         weak_ref => 1,
17     );
18
19     has 'name' => (
20         is => 'ro',
21         isa => Str,
22         required => 1
23     );
24
25     has 'columns' => (
26         traits => ['Hash'],
27         is => 'rw',
28         isa => HashRef[Column],
29         handles => {
30             exists_column => 'exists',
31             column_ids    => 'keys',
32             get_columns   => 'values',
33             get_column    => 'get',
34             add_column    => 'set',
35             clear_columns => 'clear',
36         },
37         default => sub { my %hash = (); tie %hash, 'Tie::IxHash'; return \%hash },
38     );
39
40     has 'on_table' => (
41         is => 'rw', 
42         isa => Str,
43         required => 1,
44 #        trigger => sub { my ($self, $new, $old) = @_; $self->table($self->schema->get_table($new)) },
45     );
46
47     has 'action' => (
48         is => 'rw',
49         isa => Any
50     );
51
52     has 'perform_action_when' => (
53         is => 'rw',
54         isa => Str,
55         required => 1
56     );
57
58     has '_database_events' => (
59         traits => ['Array'],
60         isa => ArrayRef,
61         handles => {
62             _database_events            => 'elements',
63             add_database_event          => 'push',
64             remove_last_database_option => 'pop',
65         },
66         default => sub { [] },
67         required => 1,
68     );
69
70     around add_column(Column $column) { $self->$orig($column->name, $column) }
71
72     multi method database_events(Str $database_event) { $self->add_database_event($database_event); $self->database_events }
73     multi method database_events(ArrayRef $database_events) { $self->add_database_event($_) for @$database_events; $self->database_events }
74     multi method database_events { wantarray ? $self->_database_events : $self->_database_events }
75 }