move actions to being held by fact objects
[scpubgit/DKit.git] / lib / DX / Result.pm
CommitLineData
deec7cc4 1package DX::Result;
2
9c7b21a2 3use Safe::Isa;
deec7cc4 4use Moo;
5
6has _state => (is => 'ro', required => 1, init_arg => 'state');
7
8sub var_names {
9 sort keys %{$_[0]->_state->scope};
10}
11
12sub actions {
13 my ($self) = @_;
9c7b21a2 14 my $state = $self->_state;
deec7cc4 15 my $by_id = $self->_state->by_id;
9c7b21a2 16 return map $_->required_action,
17 grep $_->has_required_action,
18 grep $_->$_does('DX::Role::Fact'),
19 map $state->resolve_value($_),
20 values %$by_id;
deec7cc4 21}
22
60c182d8 23sub independent_actions {
24 my ($self) = @_;
25 return grep !@{$_->dependencies}, $self->actions;
26}
27
28sub expand_action_dependencies {
deec7cc4 29 my ($self, $action) = @_;
30 my $by_id = $self->_state->by_id;
31 return map $by_id->{$_}->action, @{$action->dependencies};
32}
33
34sub value_for {
35 my ($self, $name) = @_;
0676b282 36 my $state = $self->_state;
37 $state->resolve_value($state->scope_var($name));
38}
39
40sub all_values {
41 my ($self) = @_;
42 return +{ map +($_ => $self->value_for($_)), $self->var_names };
deec7cc4 43}
44
451;