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   457082 use strict;
  26         64  
  26         1103  
4 26     26   137 use warnings;
  26         84  
  26         1455  
5 26     26   472 use 5.010;
  26         161  
6 26     26   139 use Moo::Role;
  26         58  
  26         229  
7 26     26   27767 use AnyEvent::FTP::Client::Response;
  26         79  
  26         12824  
8              
9             # ABSTRACT: Response buffer role for asynchronous ftp client
10             our $VERSION = '0.20'; # VERSION
11              
12              
13             sub on_next_response
14             {
15 822     822 0 5880 my($self, $cb) = @_;
16 822         1307 push @{ $self->{response_buffer}->{once} }, $cb;
  822         3958  
17             }
18              
19             sub on_each_response
20             {
21 1     1 0 32560 my($self, $cb) = @_;
22 1         14 push @{ $self->{response_buffer}->{each} }, $cb;
  1         11  
23             }
24              
25             sub process_message_line
26             {
27 845     845 0 2253 my($self, $line) = @_;
28              
29 845         2357 $line =~ s/\015?\012//g;
30              
31 845 100       4319 if($line =~ s/^(\d\d\d)([- ])//)
    50          
32             {
33 841   66     6728 $self->{response_buffer}->{code} //= $1;
34 841         1319 push @{ $self->{response_buffer}->{message} }, $line;
  841         3136  
35 841 100       3197 if($2 eq ' ')
36             {
37             my $response = AnyEvent::FTP::Client::Response->new(
38             $self->{response_buffer}->{code},
39             $self->{response_buffer}->{message},
40 822         6783 );
41 822         4008 delete $self->{response_buffer}->{$_} for qw( code message );
42 822         1997 my $once = delete $self->{response_buffer}->{once};
43             $_->($response)
44 822         1451 for @{ $self->{response_buffer}->{each} }, @{ $once };
  822         2165  
  822         3534  
45             }
46             }
47 4         14 elsif(@{ $self->{response_buffer}->{message} } > 0)
48             {
49 4         5 push @{ $self->{response_buffer}->{message} }, $line;
  4         13  
50             }
51             else
52             {
53 0           warn "bad message: $line";
54             }
55             }
56              
57             1;
58              
59             __END__