File Coverage

lib/Archive/BagIt/Role/OpenSSL.pm
Criterion Covered Total %
statement 38 49 77.5
branch 3 8 37.5
condition n/a
subroutine 11 12 91.6
pod 1 1 100.0
total 53 70 75.7


line stmt bran cond sub pod time code
1             package Archive::BagIt::Role::OpenSSL;
2 8     8   3654 use strict;
  8         15  
  8         249  
3 8     8   42 use warnings;
  8         12  
  8         240  
4 8     8   2579 use Archive::BagIt::Role::OpenSSL::Sync;
  8         22  
  8         261  
5 8     8   53 use Class::Load qw(load_class);
  8         12  
  8         389  
6 8     8   37 use Carp qw(carp);
  8         13  
  8         283  
7 8     8   39 use Moo::Role;
  8         9  
  8         52  
8 8     8   2767 use namespace::autoclean;
  8         14  
  8         49  
9             # ABSTRACT: A role that handles plugin loading
10             our $VERSION = '0.094'; # VERSION
11              
12              
13             has 'async_support' => (
14             is => 'ro',
15             builder => '_check_async_support',
16             predicate => 1,
17             lazy => 1,
18             );
19              
20             sub _check_async_support {
21 0     0   0 my $self = shift;
22 0 0       0 if (! exists $INC{'IO/Async.pm'}) {
23 0         0 carp "Module 'IO::Async' not available, disable async support";
24 0         0 $self->bagit->use_async(0);
25 0         0 return 0;
26             }
27 0         0 load_class('IO::Async');
28 0         0 return 1;
29             }
30              
31              
32              
33             sub _get_hash_string_sync {
34 550     550   916 my ($self, $fh, $blksize)=@_;
35 550         9855 my $obj = Archive::BagIt::Role::OpenSSL::Sync->new( name => $self->name);
36 550         17022 return $obj->calc_digest($fh, $blksize);
37             }
38              
39             sub _get_hash_string_async {
40 10     10   21 my ($self, $fh, $blksize) = @_;
41 10         13 my $result;
42 10 50       23 if ($self->has_async_support()) {
43 0         0 my $class = 'Archive::BagIt::Role::OpenSSL::Async';
44 0 0       0 load_class($class) or croak("could not load class $class");
45 0         0 my $obj = $class->new(name => $self->name);
46 0         0 $result = $obj->calc_digest($fh, $blksize);
47             } else {
48 10         23 $result = $self->_get_hash_string_sync($fh, $blksize);
49             }
50 10         32 return $result;
51             }
52              
53              
54             sub get_hash_string {
55 550     550 1 1027 my ($self, $fh) = @_;
56 550         1462 my $blksize = $self->get_optimal_bufsize($fh);
57 550         1363 my $bagobj = $self->bagit;
58 550 100       10907 if ($bagobj->use_async) {
59 10         82 return $self->_get_hash_string_async($fh, $blksize);
60             }
61 540         3895 return $self->_get_hash_string_sync($fh, $blksize);
62             }
63              
64              
65 8     8   3342 no Moo;
  8         14  
  8         34  
66             1;
67              
68             __END__