85d67745cb5faa92f16006386b169d73cfe828f5
[scpubgit/DKit.git] / lib / DX / Result.pm
1 package DX::Result;
2
3 use Moo;
4
5 has _state => (is => 'ro', required => 1, init_arg => 'state');
6
7 sub var_names {
8   sort keys %{$_[0]->_state->scope};
9 }
10
11 sub actions {
12   my ($self) = @_;
13   my $by_id = $self->_state->by_id;
14   return map $_->action, grep $_->has_action, values %$by_id;
15 }
16
17 sub independent_actions {
18   my ($self) = @_;
19   return grep !@{$_->dependencies}, $self->actions;
20 }
21
22 sub expand_action_dependencies {
23   my ($self, $action) = @_;
24   my $by_id = $self->_state->by_id;
25   return map $by_id->{$_}->action, @{$action->dependencies};
26 }
27
28 sub value_for {
29   my ($self, $name) = @_;
30   my $state = $self->_state;
31   $state->resolve_value($state->scope_var($name));
32 }
33
34 sub all_values {
35   my ($self) = @_;
36   return +{ map +($_ => $self->value_for($_)), $self->var_names };
37 }
38
39 1;