better debugging output
[scpubgit/DKit.git] / lib / DX / SetOver.pm
CommitLineData
c2e9a3a3 1package DX::SetOver;
2
3use DX::ArrayStream;
4use Moo;
5
db732a14 6with 'DX::Role::Set';
7
c2e9a3a3 8has over => (is => 'ro', required => 1);
9
10has values => (is => 'ro', default => sub { {} });
11
4ce2e778 12sub key_list { sort keys %{$_[0]->values} }
13
14sub get {
15 my ($self, $key) = @_;
16 return $self->values->{$key};
17}
18
c2e9a3a3 19sub to_stream {
20 my ($self) = @_;
aa953747 21 return DX::ArrayStream->from_array($self->all);
22}
23
24sub all {
25 my ($self) = @_;
c2e9a3a3 26 my $values = $self->values;
aa953747 27 my @ret = @{$values}{sort keys %$values};
28 return @ret;
c2e9a3a3 29}
30
31sub with_value {
32 my ($self, $value) = @_;
0ee5d1d4 33 return ref($self)->new(%$self, values => { %{$self->values} })
34 ->set_value($value);
35}
36
37sub set_value {
38 my ($self, $value) = @_;
39 $self->values->{$value->${\$self->over}} = $value;
40 return $self;
c2e9a3a3 41}
42
71217e42 43sub remove_value {
44 my ($self, $value) = @_;
0d1a41d9 45 delete $self->values->{ref($value) ? $value->${\$self->over} : $value};
71217e42 46 return $self;
47}
48
c2e9a3a3 491;