convert dict predicate to rspace and refactor
Matt S Trout [Sun, 14 Jan 2018 20:56:53 +0000 (20:56 +0000)]
lib/DX/Predicate/Dict.pm

index 3bbe0a6..262d5bc 100644 (file)
@@ -1,27 +1,30 @@
 package DX::Predicate::Dict;
 
-use DX::Utils qw(step dict TYPE_OF);
+use DX::Utils qw(rspace res dict TYPE_OF);
 use DX::Class;
 
 with 'DX::Role::Predicate';
 
-sub _possible_resolution_list {
+sub _resolution_space_for {
   my ($self, $arg, $proto) = @_;
-  if ($arg->is_set) {
-    die "dict called with non-dict"
-      unless $arg->isa('DX::Value::Dict');
-    return step(
-      actions => [],
-      depends_on => [ [ TYPE_OF ,=> $arg ] ]
-    );
-  }
-  if ($proto and not $proto->isa('DX::Value::Dict')) {
-    die "dict called with non-dict prototype";
-  }
-  my $set = $arg->action_for_set_value($proto||dict());
-  return step(
-    actions => [ $set ],
-    depends_on => [ [ TYPE_OF ,=> $arg ] ]
+
+  die "dict called with non-dict"
+    if $arg->is_set and not $arg->isa('DX::Value::Dict');
+
+  die "dict called with non-dict prototype"
+    if $proto and not $proto->isa('DX::Value::Dict');
+
+  my $deps = [ [ TYPE_OF ,=> $arg ] ];
+
+  my $actions =
+    $arg->is_set ? [] : [ $arg->action_for_set_value($proto||dict()) ];
+
+  return rspace(
+    geometry_depends_on => $deps,
+    members => [ res(
+      actions => $actions,
+      veracity_depends_on => $deps
+    ) ],
   );
 }