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