File Coverage

blib/lib/Salvation/TC/Meta/Type/Parameterized/HashRef.pm
Criterion Covered Total %
statement 26 27 96.3
branch 2 2 100.0
condition 2 3 66.6
subroutine 7 8 87.5
pod 2 2 100.0
total 39 42 92.8


line stmt bran cond sub pod time code
1             package Salvation::TC::Meta::Type::Parameterized::HashRef;
2              
3             =head1 NAME
4              
5             Salvation::TC::Meta::Type::Parameterized::HashRef - Класс для типа параметризованного HashRef.
6              
7             =cut
8              
9 3     3   1561 use strict;
  3         4  
  3         111  
10 3     3   11 use warnings;
  3         2  
  3         82  
11 3     3   13 use boolean;
  3         3  
  3         16  
12              
13 3     3   192 use Scalar::Util 'blessed';
  3         4  
  3         102  
14 3     3   9 use base 'Salvation::TC::Meta::Type::Parameterized';
  3         5  
  3         609  
15              
16             =head1 METHODS
17              
18             =cut
19              
20             =head2 iterate( HashRef $value, CodeRef $code )
21              
22             =cut
23              
24             sub iterate {
25              
26 29     29 1 32 my ( $self, $value, $code ) = @_;
27 29         27 my %clone = ();
28              
29 29         76 while( my ( $key, $item ) = each( %$value ) ) {
30              
31 33     0   27 eval { $code -> ( $item, $key, sub { $clone{ $key } = $_[ 0 ] } ) };
  33         81  
  0         0  
32              
33 33 100       112 if( $@ ) {
34              
35 16         16 keys( %$value ); # сбрасываем итератор
36 16         40 die( $@ );
37             }
38             }
39              
40 13         22 return \%clone;
41             }
42              
43             =head2 signed_type_generator()
44              
45             =cut
46              
47             sub signed_type_generator {
48              
49 2     2 1 1 my ( $self ) = @_;
50              
51 2   66     16 return $self -> { 'signed_type_generator' } //= Salvation::TC -> get( 'HashRef' ) -> signed_type_generator();
52             }
53              
54              
55             1;
56              
57             __END__