bind_var_then -> bind_value
[scpubgit/DKit.git] / lib / DX / SetOver.pm
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) = @_;
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;
26 }
27
28 sub remove_value {
29   my ($self, $value) = @_;
30   delete $self->values->{$value->${\$self->over}};
31   return $self;
32 }
33
34 1;