Commit | Line | Data |
9d759b64 |
1 | package DX::ActionBuilder::Null; |
2 | |
3 | use DX::Class; |
4 | |
5 | with 'DX::Role::ActionBuilder'; |
6 | |
2548ce61 |
7 | has target_path => (is => 'ro', isa => ValuePath); |
e1bcd735 |
8 | |
9d759b64 |
9 | sub can_set_value { 0 } |
10 | |
6aa36401 |
11 | sub aperture_for_set_value { [] } |
12 | |
9d759b64 |
13 | sub action_for_set_value { undef } |
14 | |
1f3fa757 |
15 | sub can_add_member { 0 } |
16 | |
6aa36401 |
17 | sub aperture_for_add_member { [] } |
18 | |
9d759b64 |
19 | sub action_for_add_member { undef } |
20 | |
6aa36401 |
21 | sub aperure_for_set_member { [] } |
22 | |
9d759b64 |
23 | sub action_for_set_member { undef } |
24 | |
6aa36401 |
25 | sub aperture_for_remove_member { [] } |
26 | |
9d759b64 |
27 | sub action_for_remove_member { undef } |
28 | |
345270ac |
29 | sub specialize_for_member { |
30 | my ($self, $at) = @_; |
31 | return $self unless ref($self); |
32 | return $self unless my $path = $self->target_path; |
33 | return $self->but( |
34 | target_path => [ @{$self->target_path}, $at ] |
35 | ); |
36 | } |
37 | |
38 | sub apply_to_value { |
39 | my ($self, $value) = @_; |
7a5595d3 |
40 | my $new_value = $value->but_set_action_builder($self); |
345270ac |
41 | return $new_value unless $new_value->isa('DX::Value::Dict'); |
42 | my %m = %{$new_value->members}; |
43 | return $new_value->but( |
44 | members => { |
45 | map +($_ => $self->specialize_for_member($_)->apply_to_value($m{$_})), |
46 | keys %m, |
47 | }, |
48 | ); |
49 | } |
9d759b64 |
50 | |
51 | 1; |