Commit | Line | Data |
967a2b04 |
1 | package DBIx::Data::Collection::Set::Mapped; |
2 | |
3 | use strictures 1; |
4 | |
5 | use DBIx::Data::Stream::Mapped; |
6 | |
7 | sub new { |
8 | my $proto = shift; |
9 | bless({ %{$_[0]} }, ref($proto)||$proto); |
10 | } |
11 | |
12 | sub _inner { shift->{inner} } |
13 | sub _mapper { shift->{mapper} } |
14 | |
15 | sub flatten { |
16 | my ($self) = @_; |
17 | map $self->_do_map($_), $self->_inner->flatten; |
18 | } |
19 | |
20 | sub to_stream { |
21 | my ($self) = @_; |
22 | my $mapper = $self->_mapper; |
23 | DBIx::Data::Stream::Mapped->new({ |
24 | inner => $self->_inner->to_stream, |
25 | mapper => $self->_mapper |
26 | }); |
27 | } |
28 | |
29 | sub get { |
30 | my ($self, $spec) = @_; |
31 | if (my $got = $self->_inner->get($spec)) { |
32 | return $self->_do_map($got); |
33 | } |
34 | return undef; |
35 | } |
36 | |
37 | sub _do_map { |
38 | my ($self, $to_map) = @_; |
39 | local $_ = $to_map; |
40 | $self->_mapper->($to_map); |
41 | } |
42 | |
43 | 1; |