Commit | Line | Data |
c2e9a3a3 |
1 | package DX::SetOver; |
2 | |
3 | use DX::ArrayStream; |
4 | use Moo; |
5 | |
6 | has over => (is => 'ro', required => 1); |
7 | |
8 | has values => (is => 'ro', default => sub { {} }); |
9 | |
10 | sub to_stream { |
11 | my ($self) = @_; |
12 | my $values = $self->values; |
13 | return DX::ArrayStream->from_array(@{$values}{sort keys %$values}); |
14 | } |
15 | |
16 | sub with_value { |
17 | my ($self, $value) = @_; |
0ee5d1d4 |
18 | return ref($self)->new(%$self, values => { %{$self->values} }) |
19 | ->set_value($value); |
20 | } |
21 | |
22 | sub set_value { |
23 | my ($self, $value) = @_; |
24 | $self->values->{$value->${\$self->over}} = $value; |
25 | return $self; |
c2e9a3a3 |
26 | } |
27 | |
71217e42 |
28 | sub remove_value { |
29 | my ($self, $value) = @_; |
30 | delete $self->values->{$value->${\$self->over}}; |
31 | return $self; |
32 | } |
33 | |
c2e9a3a3 |
34 | 1; |