d409b55526d6b90203314f53994dbb450c0694fb
[scpubgit/DKit.git] / lib / DX / Result.pm
1 package DX::Result;
2
3 use Safe::Isa;
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) = @_;
14   my $state = $self->_state;
15   my $actions = $state->actions;
16   my @act = @{$actions}{sort keys %$actions};
17   return @act; # separate array to get correct scalar context return
18 }
19
20 sub independent_actions {
21   my ($self) = @_;
22   return grep !@{$_->dependencies}, $self->actions;
23 }
24
25 sub expand_action_dependencies {
26   my ($self, $action) = @_;
27   my $by_id = $self->_state->by_id;
28   return map $by_id->{$_}->action, @{$action->dependencies};
29 }
30
31 sub value_for {
32   my ($self, $name) = @_;
33   my $state = $self->_state;
34   $state->resolve_value($state->scope_var($name));
35 }
36
37 sub all_values {
38   my ($self) = @_;
39   return +{ map +($_ => $self->value_for($_)), $self->var_names };
40 }
41
42 1;