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);
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 {