File Coverage

blib/lib/Iterator/Flex/Role/Freeze.pm
Criterion Covered Total %
statement 40 41 97.5
branch 3 4 75.0
condition n/a
subroutine 11 11 100.0
pod 1 1 100.0
total 55 57 96.4


line stmt bran cond sub pod time code
1             package Iterator::Flex::Role::Freeze;
2              
3             # ABSTRACT: Role to add serialization capability to an Iterator::Flex::Base
4              
5 27     27   191551 use v5.28;
  27         83  
6 27     27   105 use strict;
  27         34  
  27         482  
7 27     27   82 use warnings;
  27         35  
  27         1478  
8              
9             our $VERSION = '0.34';
10              
11 27     27   111 use List::Util;
  27         39  
  27         1305  
12              
13             use Iterator::Flex::Utils
14 27     27   556 qw( :default REG_ITERATOR REG_ITER__DEPENDS REG_ITER_FREEZE throw_failure );
  27         47  
  27         3305  
15 27     27   542 use Iterator::Flex::Base;
  27         38  
  27         592  
16 27     27   113 use Role::Tiny;
  27         47  
  27         131  
17 27     27   5709 use experimental 'signatures';
  27         38  
  27         144  
18              
19 27     27   3163 use namespace::clean;
  27         47  
  27         140  
20              
21              
22              
23              
24              
25              
26              
27              
28              
29              
30 40     40 1 11584 sub freeze ( $obj ) {
  40         45  
  40         40  
31              
32 40         70 my $ipar = $REGISTRY{ refaddr $obj }[REG_ITERATOR];
33              
34 40         48 my @freeze;
35              
36 40 100       76 if ( defined $ipar->[REG_ITER__DEPENDS] ) {
37              
38             # first check if dependencies can freeze.
39 6     6   25 my $cant = List::Util::first { !$_->can( 'freeze' ) }
40 4         13 @{ $ipar->[REG_ITER__DEPENDS] };
  4         18  
41 4 50       17 throw_failure( parameter => "dependency: @{[ $cant->_name ]} is not serializable" )
  0         0  
42             if $cant;
43              
44             # now freeze them
45 4         7 @freeze = map $_->freeze, @{ $ipar->[REG_ITER__DEPENDS] };
  4         15  
46             }
47              
48 40         94 push @freeze, $ipar->[REG_ITER_FREEZE]->( $obj ), $obj->is_exhausted;
49              
50 40         106 return \@freeze;
51             }
52              
53             requires 'is_exhausted';
54              
55             1;
56              
57             #
58             # This file is part of Iterator-Flex
59             #
60             # This software is Copyright (c) 2018 by Smithsonian Astrophysical Observatory.
61             #
62             # This is free software, licensed under:
63             #
64             # The GNU General Public License, Version 3, June 2007
65             #
66              
67             __END__