File Coverage

blib/lib/AnyEvent/HTTP/LWP/UserAgent/Determined.pm
Criterion Covered Total %
statement 39 39 100.0
branch 7 10 70.0
condition n/a
subroutine 7 7 100.0
pod 2 2 100.0
total 55 58 94.8


line stmt bran cond sub pod time code
1              
2             package AnyEvent::HTTP::LWP::UserAgent::Determined;
3              
4 3     3   291260 use strict;
  3         9  
  3         118  
5 3     3   16 use warnings;
  3         7  
  3         159  
6              
7             # ABSTRACT: a virtual browser that retries errors with AnyEvent
8             our $VERSION = 'v0.05.1.06'; # VERSION
9 3     3   3793 use AnyEvent::HTTP::LWP::UserAgent 0.08 ();
  3         358129  
  3         83  
10 3     3   3328 use LWP::UserAgent::Determined ();
  3         1705  
  3         1249  
11             our (@ISA) = ('AnyEvent::HTTP::LWP::UserAgent', 'LWP::UserAgent::Determined');
12              
13              
14             #==========================================================================
15             # extracted from LWP::UserAgent::Determined with little modification
16              
17             sub simple_request_async {
18 12     12 1 101076 my($self, @args) = @_;
19 12         68 my(@timing_tries) = ( $self->timing() =~ m<(\d+(?:\.\d+)*)>g );
20 12         262 my $determination = $self->codes_to_determinate();
21              
22 12         472 my $cv = AE::cv;
23 12         108 my $before_c = $self->before_determined_callback;
24 12         158 my $after_c = $self->after_determined_callback;
25 12         120 push @timing_tries, undef;
26              
27 12         20 my $loop;
28             $loop = sub {
29 18     18   67 my $pause_if_unsuccessful = shift @timing_tries;
30              
31 18 50       367 $before_c and $before_c->(
32             $self, \@timing_tries, $pause_if_unsuccessful, $determination, \@args);
33             $self->SUPER::simple_request_async(@args)->cb(sub {
34 18         290364 my $resp = shift->recv;
35 18 50       436 $after_c and $after_c->(
36             $self, \@timing_tries, $pause_if_unsuccessful, $determination, \@args, $resp);
37              
38 18         9889 my $code = $resp->code;
39 18 100       364 unless( $determination->{$code} ) { # normal case: all is well (or 404, etc)
40 10         56 $cv->send($resp); return;
  10         13048  
41             }
42 8 100       51 if(defined $pause_if_unsuccessful) { # it's undef only on the last
43              
44 6 50       12019097 sleep $pause_if_unsuccessful if $pause_if_unsuccessful;
45 6         81 $loop->();
46             } else {
47 2         12 $cv->send($resp);
48             }
49 18         7466 });
50 12         95 };
51 12         37 $loop->(); # First invoke
52              
53 12         58457 return $cv;
54             }
55              
56             #--------------------------------------------------------------------------
57             # extracted from LWP::UserAgent::Determined
58              
59             sub new {
60 2     2 1 18078 my $self = shift->SUPER::new(@_);
61 2         15442 $self->_determined_init();
62 2         491 return $self;
63             }
64              
65             #==========================================================================
66              
67             1;
68              
69             __END__