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