File Coverage

blib/lib/Courriel/Role/Streams.pm
Criterion Covered Total %
statement 32 32 100.0
branch n/a
condition n/a
subroutine 10 10 100.0
pod 0 2 0.0
total 42 44 95.4


line stmt bran cond sub pod time code
1             package Courriel::Role::Streams;
2              
3 10     10   6829 use strict;
  10         18  
  10         337  
4 10     10   52 use warnings;
  10         16  
  10         394  
5 10     10   61 use namespace::autoclean;
  10         21  
  10         84  
6              
7             our $VERSION = '0.43';
8              
9 10     10   925 use Courriel::Types qw( Streamable );
  10         20  
  10         101  
10 10     10   29175 use Params::ValidationCompiler qw( validation_for );
  10         172628  
  10         799  
11              
12 10     10   108 use Moose::Role;
  10         16  
  10         153  
13              
14             {
15             my $validator = validation_for(
16             params => [ output => { type => Streamable } ],
17             named_to_list => 1,
18             );
19              
20             sub stream_to {
21 10     10 0 10 my $self = shift;
22 10         310 my ($output) = $validator->(@_);
23              
24 10         1916 $self->_stream_to($output);
25              
26 10         16 return;
27             }
28             }
29              
30             sub as_string {
31 10     10 0 61 my $self = shift;
32              
33 10         16 my $string = q{};
34              
35 10         34 $self->stream_to( output => $self->_string_output( \$string ) );
36              
37 10         88 return $string;
38             }
39              
40             sub _string_output {
41 10     10   16 my $self = shift;
42 10         11 my $stringref = shift;
43              
44 10         13 my $string = q{};
45 10     10   60 return sub { ${$stringref} .= $_ for @_ };
  10         31  
  10         45  
46             }
47              
48             1;