switch recheck to using an on_completion_step
[scpubgit/DX.git] / lib / DX / Role / Predicate.pm
CommitLineData
9d759b64 1package DX::Role::Predicate;
2
3use List::Util qw(reduce);
3e465d5d 4use DX::Utils qw(step CONTENTS_OF);
9d759b64 5use DX::Role;
6
7sub resolution_step_for {
ccf0d4fe 8 my ($self, $prop, @args) = @_;
9d759b64 9 my ($last, @rest) = reverse $self->_possible_resolution_list(@args);
10 return undef unless $last;
ccf0d4fe 11 my $targ = $last->but(resolves => $prop);
12 $targ = $_->but(
13 alternative_step => $targ,
14 resolves => $prop
15 ) for @rest;
9d759b64 16 return $targ;
17}
18
19sub _make_equal {
20 my ($self, $left, $right) = @_;
21 if ($left->equals($right)) {
22 return step(
23 actions => [],
3e465d5d 24 depends_on => [
25 [ undef ,=> [ CONTENTS_OF ,=> $left ], [ CONTENTS_OF ,=> $right ] ]
26 ],
9d759b64 27 );
28 }
29 return (
30 do {
31 if ($left->is_set and my $set = $right->action_for_set_value($left)) {
32 step(
33 actions => [ $set ],
0498469a 34 depends_on => [
35 [ $right =>
3e465d5d 36 [ CONTENTS_OF ,=> $left ], [ CONTENTS_OF ,=> $right ]
0498469a 37 ]
38 ]
9d759b64 39 )
40 } else {
41 ()
42 }
43 },
44 do {
45 if ($right->is_set and my $set = $left->action_for_set_value($right)) {
46 step(
47 actions => [ $set ],
0498469a 48 depends_on => [
49 [ $left =>
3e465d5d 50 [ CONTENTS_OF ,=> $left ], [ CONTENTS_OF ,=> $right ]
0498469a 51 ]
52 ]
9d759b64 53 )
54 } else {
55 ()
56 }
57 },
58 );
59}
60
61sub selection_depends_on {
62 my ($self, @args) = @_;
63 \@args;
64}
65
661;