Commit | Line | Data |
9c7b21a2 |
1 | package DX::Role::Action; |
2 | |
3 | use Moo::Role; |
4 | |
577a2146 |
5 | has id => (is => 'ro'); |
6 | |
9c7b21a2 |
7 | has dependencies => (is => 'ro', default => sub { [] }); |
8 | |
9 | has was_run => (is => 'rw'); |
10 | |
11 | requires 'expected_effect'; |
12 | requires '_do_run'; |
13 | |
14 | sub but { my ($self, @but) = @_; ref($self)->new(%$self, @but); } |
15 | |
16 | sub run { |
17 | my ($self) = @_; |
18 | die "Can't run, was already run" if $self->was_run; |
19 | my @res = $self->_do_run; |
20 | $self->was_run(1); |
21 | return @res; |
22 | } |
23 | |
db732a14 |
24 | sub as_structure { |
25 | my ($self) = @_; |
26 | my %data = %$self; |
27 | delete $data{dependencies} unless @{$data{dependencies}}; |
28 | my $id = delete $data{id}; |
29 | +{ $id => \%data }; |
30 | } |
31 | |
9c7b21a2 |
32 | 1; |