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   26118 use strict;
  26         78  
  26         912  
4 26     26   156 use warnings;
  26         58  
  26         774  
5 26     26   554 use 5.010;
  26         100  
6 26     26   153 use Moo::Role;
  26         124  
  26         226  
7 26     26   23622 use AnyEvent::FTP::Client::Response;
  26         150  
  26         10622  
8              
9             # ABSTRACT: Response buffer role for asynchronous ftp client
10             our $VERSION = '0.17'; # VERSION
11              
12              
13             sub on_next_response
14             {
15 822     822 0 5386 my($self, $cb) = @_;
16 822         1400 push @{ $self->{response_buffer}->{once} }, $cb;
  822         3772  
17             }
18              
19             sub on_each_response
20             {
21 1     1 0 22139 my($self, $cb) = @_;
22 1         2 push @{ $self->{response_buffer}->{each} }, $cb;
  1         8  
23             }
24              
25             sub process_message_line
26             {
27 845     845 0 2400 my($self, $line) = @_;
28              
29 845         2302 $line =~ s/\015?\012//g;
30              
31 845 100       4209 if($line =~ s/^(\d\d\d)([- ])//)
    50          
32             {
33 841   66     6555 $self->{response_buffer}->{code} //= $1;
34 841         1514 push @{ $self->{response_buffer}->{message} }, $line;
  841         2886  
35 841 100       3247 if($2 eq ' ')
36             {
37             my $response = AnyEvent::FTP::Client::Response->new(
38             $self->{response_buffer}->{code},
39             $self->{response_buffer}->{message},
40 822         5001 );
41 822         4027 delete $self->{response_buffer}->{$_} for qw( code message );
42 822         2019 my $once = delete $self->{response_buffer}->{once};
43             $_->($response)
44 822         1502 for @{ $self->{response_buffer}->{each} }, @{ $once };
  822         2086  
  822         3120  
45             }
46             }
47 4         11 elsif(@{ $self->{response_buffer}->{message} } > 0)
48             {
49 4         5 push @{ $self->{response_buffer}->{message} }, $line;
  4         12  
50             }
51             else
52             {
53 0           warn "bad message: $line";
54             }
55             }
56              
57             1;
58              
59             __END__