eliminate variable name requirement from query()
[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   grep $_[0]->_state->scope_var($_)->is_bound,
10     sort keys %{$_[0]->_state->scope};
11 }
12
13 sub actions {
14   my ($self) = @_;
15   my $state = $self->_state;
16   my $actions = $state->actions;
17   my @act = @{$actions}{sort keys %$actions};
18   return @act; # separate array to get correct scalar context return
19 }
20
21 sub independent_actions {
22   my ($self) = @_;
23   return grep !@{$_->dependencies}, $self->actions;
24 }
25
26 sub expand_action_dependencies {
27   my ($self, $action) = @_;
28   my $by_id = $self->_state->by_id;
29   return map $by_id->{$_}->action, @{$action->dependencies};
30 }
31
32 sub value_for {
33   my ($self, $name) = @_;
34   my $state = $self->_state;
35   $state->resolve_value($state->scope_var($name));
36 }
37
38 sub all_values {
39   my ($self) = @_;
40   return +{ map +($_ => $self->value_for($_)), $self->var_names };
41 }
42
43 1;