move actions to being held by fact objects
[scpubgit/DKit.git] / lib / DX / Role / Action.pm
1 package DX::Role::Action;
2
3 use Moo::Role;
4
5 has dependencies => (is => 'ro', default => sub { [] });
6
7 has was_run => (is => 'rw');
8
9 requires 'expected_effect';
10 requires '_do_run';
11
12 sub but { my ($self, @but) = @_; ref($self)->new(%$self, @but); }
13
14 sub run {
15   my ($self) = @_;
16   die "Can't run, was already run" if $self->was_run;
17   my @res = $self->_do_run;
18   $self->was_run(1);
19   return @res;
20 }
21
22 1;