bugfixes, tweaks, map support
[dbsrgits/DBIx-Data-Store.git] / lib / DBIx / Data / Collection / Set / Mapped.pm
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;