better debugging output
[scpubgit/DKit.git] / lib / DX / Role / Action.pm
1 package DX::Role::Action;
2
3 use Moo::Role;
4
5 has id => (is => 'ro');
6
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
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
32 1;