add ->all method to SetOver
[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
4ce2e778 10sub key_list { sort keys %{$_[0]->values} }
11
12sub get {
13 my ($self, $key) = @_;
14 return $self->values->{$key};
15}
16
c2e9a3a3 17sub to_stream {
18 my ($self) = @_;
aa953747 19 return DX::ArrayStream->from_array($self->all);
20}
21
22sub all {
23 my ($self) = @_;
c2e9a3a3 24 my $values = $self->values;
aa953747 25 my @ret = @{$values}{sort keys %$values};
26 return @ret;
c2e9a3a3 27}
28
29sub with_value {
30 my ($self, $value) = @_;
0ee5d1d4 31 return ref($self)->new(%$self, values => { %{$self->values} })
32 ->set_value($value);
33}
34
35sub set_value {
36 my ($self, $value) = @_;
37 $self->values->{$value->${\$self->over}} = $value;
38 return $self;
c2e9a3a3 39}
40
71217e42 41sub remove_value {
42 my ($self, $value) = @_;
43 delete $self->values->{$value->${\$self->over}};
44 return $self;
45}
46
c2e9a3a3 471;