File Coverage

blib/lib/Role/TinyCommons/Collection/FindItem/Iterator.pm
Criterion Covered Total %
statement 6 25 24.0
branch 0 14 0.0
condition n/a
subroutine 2 5 40.0
pod 1 1 100.0
total 9 45 20.0


line stmt bran cond sub pod time code
1             package Role::TinyCommons::Collection::FindItem::Iterator;
2              
3 1     1   289675 use Role::Tiny;
  1         7672  
  1         8  
4 1     1   877 use Role::Tiny::With;
  1         386  
  1         406  
5              
6             our $AUTHORITY = 'cpan:PERLANCAR'; # AUTHORITY
7             our $DATE = '2024-01-16'; # DATE
8             our $DIST = 'Role-TinyCommons-Collection'; # DIST
9             our $VERSION = '0.010'; # VERSION
10              
11             ### implements
12              
13             with 'Role::TinyCommons::Collection::FindItem';
14              
15             ### requires
16              
17             requires 'each_item';
18              
19             ### optionally depends
20             # 'cmp_items'; # Role::TinyCommons::Collection::CompareItems
21              
22             ### provides
23              
24             sub find_item {
25 0     0 1   my ($self, %args) = @_;
26              
27 0           my $search_item = $args{item};
28 0           my $return_pos = $args{return_pos};
29 0           my $all = $args{all};
30              
31 0           my @results;
32 0 0         if ($self->can('cmp_items')) {
33             $self->each_item(
34             sub {
35 0     0     my ($iter_item, $obj, $pos) = @_;
36 0 0         if ($obj->cmp_items($iter_item, $search_item) == 0) {
37 0 0         push @results, $return_pos ? $pos : $iter_item;
38 0 0         return 0 unless $all;
39             }
40 0           1;
41 0           });
42             } else {
43             $self->each_item(
44             sub {
45 0     0     my ($iter_item, $obj, $pos) = @_;
46 0 0         if (($iter_item cmp $search_item) == 0) {
47 0 0         push @results, $return_pos ? $pos : $iter_item;
48 0 0         return 0 unless $all;
49             }
50 0           1;
51 0           });
52             }
53 0           @results;
54             }
55              
56             1;
57             # ABSTRACT: Provides find_item() for iterators
58              
59             __END__