Commit | Line | Data |
9d759b64 |
1 | package DX::Role::Predicate; |
2 | |
3 | use List::Util qw(reduce); |
3e465d5d |
4 | use DX::Utils qw(step CONTENTS_OF); |
9d759b64 |
5 | use DX::Role; |
6 | |
7 | sub 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 | |
19 | sub _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 | |
61 | sub selection_depends_on { |
62 | my ($self, @args) = @_; |
63 | \@args; |
64 | } |
65 | |
66 | 1; |