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 | |
e1bcd735 |
9 | around target_path => sub { |
10 | my ($orig, $self) = (shift, shift); |
11 | return undef unless ref($self); |
12 | return $self->$orig(@_); |
13 | }; |
14 | |
9d759b64 |
15 | sub can_set_value { 0 } |
16 | |
6aa36401 |
17 | sub aperture_for_set_value { [] } |
18 | |
9d759b64 |
19 | sub action_for_set_value { undef } |
20 | |
1f3fa757 |
21 | sub can_add_member { 0 } |
22 | |
6aa36401 |
23 | sub aperture_for_add_member { [] } |
24 | |
9d759b64 |
25 | sub action_for_add_member { undef } |
26 | |
6aa36401 |
27 | sub aperure_for_set_member { [] } |
28 | |
9d759b64 |
29 | sub action_for_set_member { undef } |
30 | |
6aa36401 |
31 | sub aperture_for_remove_member { [] } |
32 | |
9d759b64 |
33 | sub action_for_remove_member { undef } |
34 | |
345270ac |
35 | sub specialize_for_member { |
36 | my ($self, $at) = @_; |
37 | return $self unless ref($self); |
38 | return $self unless my $path = $self->target_path; |
39 | return $self->but( |
40 | target_path => [ @{$self->target_path}, $at ] |
41 | ); |
42 | } |
43 | |
44 | sub apply_to_value { |
45 | my ($self, $value) = @_; |
7a5595d3 |
46 | my $new_value = $value->but_set_action_builder($self); |
345270ac |
47 | return $new_value unless $new_value->isa('DX::Value::Dict'); |
48 | my %m = %{$new_value->members}; |
49 | return $new_value->but( |
50 | members => { |
51 | map +($_ => $self->specialize_for_member($_)->apply_to_value($m{$_})), |
52 | keys %m, |
53 | }, |
54 | ); |
55 | } |
9d759b64 |
56 | |
57 | 1; |