Commit | Line | Data |
deec7cc4 |
1 | package DX::Result; |
2 | |
9c7b21a2 |
3 | use Safe::Isa; |
deec7cc4 |
4 | use Moo; |
5 | |
6 | has _state => (is => 'ro', required => 1, init_arg => 'state'); |
7 | |
8 | sub var_names { |
9 | sort keys %{$_[0]->_state->scope}; |
10 | } |
11 | |
12 | sub 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 |
23 | sub independent_actions { |
24 | my ($self) = @_; |
25 | return grep !@{$_->dependencies}, $self->actions; |
26 | } |
27 | |
28 | sub 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 | |
34 | sub value_for { |
35 | my ($self, $name) = @_; |
0676b282 |
36 | my $state = $self->_state; |
37 | $state->resolve_value($state->scope_var($name)); |
38 | } |
39 | |
40 | sub all_values { |
41 | my ($self) = @_; |
42 | return +{ map +($_ => $self->value_for($_)), $self->var_names }; |
deec7cc4 |
43 | } |
44 | |
45 | 1; |