X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=lib%2FDX%2FOp%2FProposeAction.pm;h=2249496afda4d4165f73a074f88e7a70d8e86b97;hb=4ce2e7784f3194a4f3db8df1711e951c0b05e7cf;hp=7031b4f2b16ffb9aa5437b3f8f2853e2a2b2a8f8;hpb=0676b2822d7fdcab673d3f0c4a85fe9d05af8a76;p=scpubgit%2FDKit.git diff --git a/lib/DX/Op/ProposeAction.pm b/lib/DX/Op/ProposeAction.pm index 7031b4f..2249496 100644 --- a/lib/DX/Op/ProposeAction.pm +++ b/lib/DX/Op/ProposeAction.pm @@ -19,11 +19,16 @@ sub run { ($state, my %args) = $self->_expand_args($state, %{$self->_arg_map}); my @vars = @args{sort keys %args}; my @deps = $state->action_dependencies(map $_->id, @vars); - my $action = $self->builder->(@vars) + my $action = $self->builder->(map $state->resolve_value($_), @vars) ->but(dependencies => \@deps); - my ($id, $value) = $action->expected_effect; - my $var = $state->by_id->{$id}->with_value($value)->with_action($action); - $state->but(by_id => { %{$state->by_id}, $id => $var }) + my ($fact_type, $value) = $action->expected_effect; + my $id = $vars[0]->id; + my $var = $state->by_id->{$id}->with_action($action); + my $fact_set = $state->facts->{$fact_type}->with_value($value); + $state->but( + by_id => { %{$state->by_id}, $id => $var }, + facts => { %{$state->facts}, $fact_type => $fact_set }, + ) ->then($self->next); }