introduce next_step method to rspace
Matt S Trout [Fri, 30 Mar 2018 16:20:07 +0000 (16:20 +0000)]
lib/DX/ResolutionSpace.pm
lib/DX/Role/Predicate.pm

index ab14c35..4210b02 100644 (file)
@@ -1,7 +1,10 @@
 package DX::ResolutionSpace;
 
+use DX::Utils qw(step);
 use DX::Class;
 
+has proposition => (is => 'ro');
+
 has geometry_depends_on => (is => 'ro', required => 1);
 
 has members => (is => 'ro', required => 1);
@@ -18,4 +21,13 @@ sub remaining_resolution_space {
   return $self->but(members => [ $first->remainder, @rest ]);
 }
 
+sub next_step {
+  my ($self) = @_;
+  return undef unless @{$self->members};
+  return step(
+    resolves => $self->proposition,
+    resolution_space => $self,
+  );
+}
+
 1;
index e2e76d6..0612168 100644 (file)
@@ -6,12 +6,9 @@ use DX::Role;
 
 sub resolution_step_for {
   my ($self, $prop, @args) = @_;
-  my $rspace = $self->_resolution_space_for(@args);
-  return undef unless @{$rspace->members};
-  return step(
-    resolves => $prop,
-    resolution_space => $rspace
-  );
+  $self->_resolution_space_for(@args)
+       ->but(proposition => $prop)
+       ->next_step;
 }
 
 1;