move dep expansion into step() and clean up ResolveProposition.pm
Matt S Trout [Wed, 15 Feb 2017 21:10:23 +0000 (21:10 +0000)]
lib/DX/Step/ResolveProposition.pm
lib/DX/Utils.pm

index 6f91b9b..173a0fa 100644 (file)
@@ -12,20 +12,7 @@ with 'DX::Role::Step';
 
 has actions => (is => 'ro', isa => ArrayRef[Action], required => 1);
 
-#has depends_on => (is => 'ro', isa => DependencyGroupList, required => 1);
-
-has depends_on => (is => 'ro', required => 1, coerce => sub {
-  my ($deps) = @_;
-  my @exp;
-  DEP: foreach my $dep (@$deps) {
-    my ($type, @path) = @$dep;
-    push @exp, [
-      $type,
-      map { ref() ? @{$_->value_path or next DEP} : $_ } @path
-    ];
-  }
-  \@exp
-});
+has depends_on => (is => 'ro', isa => ArrayRef[DependencySpec], required => 1);
 
 has resolves => (is => 'ro', isa => Proposition);
 
index 243879f..0cb207d 100644 (file)
@@ -44,9 +44,25 @@ our @VALUE_SET = (TYPE_OF(), INDICES_OF(), CONTENTS_OF());
 
 sub trace { }
 
+sub _expand_dep {
+  my ($type, @path) = @{$_[0]};
+  my @expanded = map {
+    ref() ? @{$_->value_path or return ()} : $_
+  } @path;
+  return [ $type, @expanded ];
+}
+
+sub _expand_deps {
+  [ map _expand_dep($_), @{$_[0]} ]
+}
+
 sub step {
   require DX::Step::ResolveProposition;
-  DX::Step::ResolveProposition->new(@_);
+  my %args = @_;
+  DX::Step::ResolveProposition->new(
+    %args,
+    depends_on => _expand_deps($args{depends_on}),
+  );
 }
 
 sub string {