File Coverage

blib/lib/AnyEvent/Ident/Response.pm
Criterion Covered Total %
statement 38 41 92.6
branch 10 12 83.3
condition 1 2 50.0
subroutine 11 12 91.6
pod 8 9 88.8
total 68 76 89.4


line stmt bran cond sub pod time code
1             package AnyEvent::Ident::Response;
2              
3 5     5   1460 use strict;
  5         13  
  5         167  
4 5     5   30 use warnings;
  5         10  
  5         3432  
5              
6             # ABSTRACT: Simple asynchronous ident response
7             our $VERSION = '0.08'; # VERSION
8              
9             sub new
10             {
11 22     22 0 448 my $class = shift;
12 22 100       70 if(@_ == 1)
13             {
14 13         23 my $raw = shift;
15 13         34 $raw =~ s/^\s+//;
16 13         38 $raw =~ s/\s+$//;
17 13         100 my ($pair, @list) = split /\s*:\s*/, $raw;
18 13         59 my($server_port, $client_port) = split /\s*,\s*/, $pair;
19 13         106 my $self = bless {
20             raw => $raw,
21             server_port => $server_port,
22             client_port => $client_port
23             }, $class;
24            
25 13 100       83 if($list[0] eq 'USERID')
26             {
27 5         13 shift @list;
28 5         30 ($self->{os}, $self->{charset}) = split /\s,\s*/, shift @list;
29 5         16 $self->{username} = shift @list;
30 5   50     28 $self->{charset} ||= 'US-ASCII';
31             }
32             else
33             {
34 8         16 shift @list;
35 8         20 $self->{error_type} = shift @list;
36             }
37            
38 13         68 return $self;
39             }
40             else
41             {
42 9 50       42 my $args = ref $_[0] eq 'HASH' ? (\%{$_[0]}) : ({@_});
  0         0  
43             my $self = bless {
44             server_port => $args->{req}->server_port,
45             client_port => $args->{req}->client_port,
46             username => $args->{username},
47             os => $args->{os},
48             charset => $args->{charset},
49             error_type => $args->{error_type},
50 9         32 }, $class;
51 9 100       38 $self->{os} = 'OTHER' unless defined $self->{os};
52 9 100       31 if($self->{error_type})
    50          
53             {
54 4         20 $self->{raw} = join(':', join(',', $self->{server_port}, $self->{client_port}), 'ERROR', $self->{error_type});
55             }
56             elsif($self->{charset})
57             {
58 0         0 $self->{raw} = join(':', join(',', $self->{server_port}, $self->{client_port}), 'USERID', join(',', $self->{os}, $self->{charset}), $self->{username});
59             }
60             else
61             {
62 5         26 $self->{raw} = join(':', join(',', $self->{server_port}, $self->{client_port}), 'USERID', $self->{os}, $self->{username});
63             }
64 9         42 return $self;
65             }
66             }
67              
68             sub _key
69             {
70 15     15   31 my($self) = @_;
71 15         62 join ':', $self->{server_port}, $self->{client_port};
72             }
73              
74              
75 11     11 1 1697 sub as_string { shift->{raw} }
76 15     15 1 4517 sub is_success { defined shift->{username} }
77 4     4 1 31 sub server_port { shift->{server_port} }
78 4     4 1 21 sub client_port { shift->{client_port} }
79 6     6 1 32 sub username { shift->{username} }
80 6     6 1 30 sub os { shift->{os} }
81 0     0 1 0 sub charset { shift->{charset} }
82 9     9 1 49 sub error_type { shift->{error_type} }
83              
84             1;
85              
86             __END__