9d54ccd47ae513b61805301b7966008788c98b2d
[dbsrgits/DBIx-Data-Store-old.git] / lib / DBIx / Data / Collection / Set.pm
1 package DBIx::Data::Collection::Set;
2
3 use Moose;
4 use Method::Signatures::Simple;
5 use Data::Perl::Stream::Array;
6
7 has _store => (is => 'ro', required => 1, init_arg => 'store');
8
9 has _class => (is => 'ro', predicate => '_has_class');
10
11 has _member_cache => (is => 'rw', lazy_build => 1);
12
13 method _build__member_cache {
14   my $stream = $self->_new_raw_stream;
15   my @cache;
16   while (my ($raw) = $stream->next) {
17     push @cache, $self->_inflate($raw);
18   }
19   \@cache;
20 }
21
22 method _new_raw_stream {
23   $self->_store->new_select_command([])->execute;
24 }
25
26 method _inflate ($raw) {
27   bless($raw, $self->_class) if $self->_has_class;
28   $raw;
29 }
30
31 method flatten {
32   @{$self->_member_cache};
33 }
34
35 method as_stream {
36   Data::Perl::Stream::Array->new(array => $self->_member_cache);
37 }
38
39 1;