File Coverage

blib/lib/Catmandu/Store/MongoDB/Searcher.pm
Criterion Covered Total %
statement 9 27 33.3
branch 0 8 0.0
condition 0 8 0.0
subroutine 3 7 42.8
pod 0 3 0.0
total 12 53 22.6


line stmt bran cond sub pod time code
1             package Catmandu::Store::MongoDB::Searcher;
2              
3 3     3   17 use Catmandu::Sane;
  3         7  
  3         18  
4              
5             our $VERSION = '0.0806';
6              
7 3     3   474 use Moo;
  3         6  
  3         15  
8 3     3   830 use namespace::clean;
  3         14  
  3         24  
9              
10             with 'Catmandu::Iterable';
11              
12             has bag => (is => 'ro', required => 1);
13             has query => (is => 'ro', required => 1);
14             has start => (is => 'ro', required => 1);
15             has limit => (is => 'ro', required => 1);
16             has total => (is => 'ro');
17             has sort => (is => 'ro');
18             has fields => (is => 'ro');
19              
20             sub generator {
21 0     0 0   my ($self) = @_;
22             sub {
23 0     0     state $cursor = do {
24 0           my $c = $self->bag->_cursor($self->query);
25 0 0         $c->fields($self->fields) if defined $self->fields;
26              
27             # limit is unused because the perl driver doesn't expose batchSize
28 0 0         $c->limit($self->total) if defined $self->total;
29 0 0         $c->sort($self->sort) if defined $self->sort;
30 0           $c->immortal(1);
31 0           $c;
32             };
33 0           $cursor->next;
34 0           };
35             }
36              
37             sub slice { # TODO constrain total?
38 0     0 0   my ($self, $start, $total) = @_;
39 0   0       $start //= 0;
40 0           $self->new(
41             bag => $self->bag,
42             query => $self->query,
43             start => $self->start + $start,
44             limit => $self->limit,
45             total => $total,
46             sort => $self->sort,
47             fields => $self->fields,
48             );
49             }
50              
51             sub count { # TODO constrain on start, total?
52 0     0 0   my ($self) = @_;
53 0           my $query = $self->query;
54 0 0 0       if (!($query && scalar(keys %$query) > 0)
      0        
55             && $self->bag->store->estimate_count)
56             {
57 0           return $self->collection->estimated_document_count();
58             }
59 0           $self->bag->collection->count_documents($self->query,
60             $self->bag->_options);
61             }
62              
63             1;