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   228668 use v5.28;
  27         113  
6 27     27   152 use strict;
  27         52  
  27         701  
7 27     27   128 use warnings;
  27         52  
  27         2090  
8              
9             our $VERSION = '0.33';
10              
11 27     27   160 use List::Util;
  27         80  
  27         2183  
12              
13             use Iterator::Flex::Utils
14 27     27   585 qw( :default REG_ITERATOR REG_ITER__DEPENDS REG_ITER_FREEZE throw_failure );
  27         52  
  27         4688  
15 27     27   641 use Iterator::Flex::Base;
  27         79  
  27         933  
16 27     27   135 use Role::Tiny;
  27         52  
  27         229  
17 27     27   8161 use experimental 'signatures';
  27         82  
  27         289  
18              
19 27     27   4525 use namespace::clean;
  27         62  
  27         191  
20              
21              
22              
23              
24              
25              
26              
27              
28              
29              
30 40     40 1 18016 sub freeze ( $obj ) {
  40         62  
  40         52  
31              
32 40         91 my $ipar = $REGISTRY{ refaddr $obj }[REG_ITERATOR];
33              
34 40         54 my @freeze;
35              
36 40 100       111 if ( defined $ipar->[REG_ITER__DEPENDS] ) {
37              
38             # first check if dependencies can freeze.
39 6     6   39 my $cant = List::Util::first { !$_->can( 'freeze' ) }
40 4         18 @{ $ipar->[REG_ITER__DEPENDS] };
  4         26  
41 4 50       23 throw_failure( parameter => "dependency: @{[ $cant->_name ]} is not serializeable" )
  0         0  
42             if $cant;
43              
44             # now freeze them
45 4         10 @freeze = map $_->freeze, @{ $ipar->[REG_ITER__DEPENDS] };
  4         23  
46             }
47              
48 40         125 push @freeze, $ipar->[REG_ITER_FREEZE]->( $obj ), $obj->is_exhausted;
49              
50 40         125 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__