allow observer to enter N facts
[scpubgit/DKit.git] / lib / DX / ResultStream.pm
index 17f0bd7..559c1f1 100644 (file)
@@ -1,5 +1,6 @@
 package DX::ResultStream;
 
+use DX::Result;
 use Moo;
 
 has for_state => (is => 'ro', required => 1);
@@ -24,9 +25,11 @@ sub next {
     last if $state->isa('DX::State');
     if ($state->isa('DX::ObservationRequired')) {
       if ($self->observation_policy->($state->observer)) {
-        my ($type, $value) = $state->observer->run;
+        my @ob = $state->observer->run;
         $state = $state->resume;
-        $state->facts->{$type}->set_value($value);
+        while (my ($type, $value) = splice(@ob, 0, 2)) {
+          $state->facts->{$type}->set_value($value);
+        }
       } else {
         die "Observation refused";
       }
@@ -38,9 +41,7 @@ sub next {
     $self->_set_is_exhausted(1);
     return;
   }
-  return +{
-    map +($_ => $state->scope_var($_)->bound_value), keys %{$state->scope}
-  };
+  return DX::Result->new(state => $state->copy_vars);
 }
 
 sub results {