File Coverage

blib/lib/LWP/ConnCache/Resolving.pm
Criterion Covered Total %
statement 12 40 30.0
branch 0 10 0.0
condition 0 9 0.0
subroutine 4 9 44.4
pod 3 3 100.0
total 19 71 26.7


line stmt bran cond sub pod time code
1             package LWP::ConnCache::Resolving;
2              
3 1     1   38932 use strict;
  1         3  
  1         55  
4 1     1   6 use warnings;
  1         2  
  1         35  
5              
6 1     1   5 use Carp;
  1         6  
  1         101  
7              
8 1     1   5 use base 'LWP::ConnCache';
  1         1  
  1         921  
9              
10             our $VERSION = '0.02';
11              
12             sub new {
13 0     0 1   my $class = shift;
14 0           my $self = LWP::ConnCache->new(@_);
15              
16 0           bless $self, $class;
17 0           $self->_initialize(@_);
18 0           return $self;
19             }
20              
21             sub _initialize
22             {
23 0     0     my $self = shift;
24              
25 0           my %params = @_;
26              
27 0           $self->{resolver} = $params{resolver};
28            
29 0 0 0       unless ($self->{resolver} && ref($self->{resolver}) eq 'CODE')
30             {
31 0           croak "You must specify a resolver. Otherwise, just use LWP::ConnCache.";
32             }
33              
34             # do_res_cache will default to yes - disable it if your resolution is very fast
35 0 0         $self->{do_res_cache} = defined($params{do_res_cache}) ? $params{do_res_cache} : 1;
36 0           $self->{res_cache} = {};
37             }
38              
39             sub deposit {
40 0     0 1   my($self, $type, $key, $conn) = @_;
41 0           return ($self->SUPER::deposit($type, $self->_get_resolved_key($key), $conn));
42             }
43              
44             sub withdraw {
45 0     0 1   my($self, $type, $key) = @_;
46 0           return ($self->SUPER::withdraw($type, $self->_get_resolved_key($key)));
47             }
48              
49             sub _get_resolved_key
50             {
51 0     0     my $self = shift;
52 0           my $key = shift;
53              
54 0           my $newkey;
55            
56 0 0         if ($self->{do_res_cache})
57             {
58 0           $newkey = $self->{res_cache}->{$key};
59 0 0         return $newkey if $newkey;
60             }
61              
62             eval
63 0           {
64 0           $newkey = &{$self->{resolver}}($key);
  0            
65             };
66              
67 0 0         if ($self->{do_res_cache})
68             {
69 0   0       $self->{res_cache}->{$key} = $newkey || $key;
70             }
71              
72 0   0       return $newkey || $key;
73             }
74              
75              
76             1;
77             __END__