File Coverage

blib/lib/AnyEvent/FTP/Client/Role/ResponseBuffer.pm
Criterion Covered Total %
statement 36 37 97.3
branch 5 6 83.3
condition 2 3 66.6
subroutine 8 8 100.0
pod 0 3 0.0
total 51 57 89.4


line stmt bran cond sub pod time code
1             package AnyEvent::FTP::Client::Role::ResponseBuffer;
2              
3 26     26   18346 use strict;
  26         53  
  26         632  
4 26     26   116 use warnings;
  26         47  
  26         605  
5 26     26   394 use 5.010;
  26         71  
6 26     26   123 use Moo::Role;
  26         48  
  26         179  
7 26     26   16188 use AnyEvent::FTP::Client::Response;
  26         162  
  26         7629  
8              
9             # ABSTRACT: Response buffer role for asynchronous ftp client
10             our $VERSION = '0.19'; # VERSION
11              
12              
13             sub on_next_response
14             {
15 822     822 0 4031 my($self, $cb) = @_;
16 822         1149 push @{ $self->{response_buffer}->{once} }, $cb;
  822         2589  
17             }
18              
19             sub on_each_response
20             {
21 1     1 0 16215 my($self, $cb) = @_;
22 1         2 push @{ $self->{response_buffer}->{each} }, $cb;
  1         6  
23             }
24              
25             sub process_message_line
26             {
27 845     845 0 1597 my($self, $line) = @_;
28              
29 845         1670 $line =~ s/\015?\012//g;
30              
31 845 100       2851 if($line =~ s/^(\d\d\d)([- ])//)
    50          
32             {
33 841   66     4593 $self->{response_buffer}->{code} //= $1;
34 841         1035 push @{ $self->{response_buffer}->{message} }, $line;
  841         2056  
35 841 100       2362 if($2 eq ' ')
36             {
37             my $response = AnyEvent::FTP::Client::Response->new(
38             $self->{response_buffer}->{code},
39             $self->{response_buffer}->{message},
40 822         6768 );
41 822         2787 delete $self->{response_buffer}->{$_} for qw( code message );
42 822         1389 my $once = delete $self->{response_buffer}->{once};
43             $_->($response)
44 822         1006 for @{ $self->{response_buffer}->{each} }, @{ $once };
  822         1600  
  822         2280  
45             }
46             }
47 4         10 elsif(@{ $self->{response_buffer}->{message} } > 0)
48             {
49 4         5 push @{ $self->{response_buffer}->{message} }, $line;
  4         8  
50             }
51             else
52             {
53 0           warn "bad message: $line";
54             }
55             }
56              
57             1;
58              
59             __END__