better debugging output
[scpubgit/DKit.git] / lib / DX / Role / Action.pm
CommitLineData
9c7b21a2 1package DX::Role::Action;
2
3use Moo::Role;
4
577a2146 5has id => (is => 'ro');
6
9c7b21a2 7has dependencies => (is => 'ro', default => sub { [] });
8
9has was_run => (is => 'rw');
10
11requires 'expected_effect';
12requires '_do_run';
13
14sub but { my ($self, @but) = @_; ref($self)->new(%$self, @but); }
15
16sub 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 24sub 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 321;