theory      2004/10/27 11:00:37

  Modified:    perl-framework/Apache-Test Changes
               perl-framework/Apache-Test/lib/Apache TestRequest.pm
  Log:
  Separated the $RedirectOK package variable from the setting of
  the same information by passing the "requests_redirectable"
  parameter to the user_agent() method. This allows us to keep
  finer control over when the module sets the value and when the
  user sets the value. Done by adding a separate $REDIR lexical
  variable to handle when it is set internally. I hope I've added
  enough comments to make it clear to future hackers of this
  crazy module how it's supposed to work.
  
  Revision  Changes    Path
  1.188     +8 -3      httpd-test/perl-framework/Apache-Test/Changes
  
  Index: Changes
  ===================================================================
  RCS file: /home/cvs/httpd-test/perl-framework/Apache-Test/Changes,v
  retrieving revision 1.187
  retrieving revision 1.188
  diff -u -r1.187 -r1.188
  --- Changes   23 Oct 2004 15:41:10 -0000      1.187
  +++ Changes   27 Oct 2004 18:00:37 -0000      1.188
  @@ -15,9 +15,14 @@
   fix problem with multiple all.t files where only the final
   file was being run through the test harness.  [Geoffrey Young]
   
  -Documented that redirection does not with "POST" requests in
  -Apache::TestRequest unless LWP is installed. Also modified
  -the redirect_ok() method to ensure that such is the case.
  +Documented that redirection does not work with "POST" requests in
  +Apache::TestRequest unless LWP is installed. [David Wheeler]
  +
  +Separated the setting of the undocumented $RedirectOK package
  +variable by users of Apache::TestRequest from when it is set
  +internally by passing the "requests_redirectable" parameter to
  +the user_agent() method. This allows users to override the
  +behavior set by the user_agent() method without replacing it.
   [David Wheeler]
   
   
  
  
  
  1.103     +20 -11    
httpd-test/perl-framework/Apache-Test/lib/Apache/TestRequest.pm
  
  Index: TestRequest.pm
  ===================================================================
  RCS file: 
/home/cvs/httpd-test/perl-framework/Apache-Test/lib/Apache/TestRequest.pm,v
  retrieving revision 1.102
  retrieving revision 1.103
  diff -u -r1.102 -r1.103
  --- TestRequest.pm    26 Oct 2004 01:48:16 -0000      1.102
  +++ TestRequest.pm    27 Oct 2004 18:00:37 -0000      1.103
  @@ -82,6 +82,7 @@
   @ISA = qw(LWP::UserAgent);
   
   my $UA;
  +my $REDIR = $have_lwp ? undef : 1;
   
   sub module {
       my $module = shift;
  @@ -116,16 +117,19 @@
       if (exists $args->{requests_redirectable}) {
           my $redir = $args->{requests_redirectable};
           if (ref $redir and (@$redir > 1 or $redir->[0] ne 'POST')) {
  -            $RedirectOK = $have_lwp ? undef : 1;
  +            # Set our internal flag if there's no LWP.
  +            $REDIR = $have_lwp ? undef : 1;
           } elsif ($redir) {
               if ($have_lwp) {
                   $args->{requests_redirectable} = [ qw/GET HEAD POST/ ];
  -                $RedirectOK = undef;
  +                $REDIR = undef;
               } else {
  -                $RedirectOK = 1;
  +                # Set our internal flag.
  +                $REDIR = 1;
               }
           } else {
  -            $RedirectOK = 0;
  +            # Make sure our internal flag is false if there's no LWP.
  +            $REDIR = $have_lwp ? undef : 0;
           }
       }
   
  @@ -199,14 +203,19 @@
       \%wanted_args;
   }
   
  -$RedirectOK = 1;
  -
   sub redirect_ok {
       my $self = shift;
  -    return $self->SUPER::redirect_ok(@_)
  -      if $have_lwp && ! defined $RedirectOK;
  -    return 0 if shift->method eq 'POST';
  -    $RedirectOK;
  +    if ($have_lwp) {
  +        # Return user setting or let LWP handle it.
  +        return $RedirectOK if defined $RedirectOK;
  +        return $self->SUPER::redirect_ok(@_);
  +    }
  +
  +    # No LWP. We don't support redirect on POST.
  +    return 0 if $self->method eq 'POST';
  +    # Return user setting or our internal calculation.
  +    return $RedirectOK if defined $RedirectOK;
  +    return $REDIR;
   }
   
   my %credentials;
  @@ -331,7 +340,7 @@
   sub UPLOAD {
       my($url, $pass, $keep) = prepare(@_);
   
  -    local $RedirectOK = exists $keep->{redirect_ok} 
  +    local $RedirectOK = exists $keep->{redirect_ok}
           ? $keep->{redirect_ok}
           : $RedirectOK;
   
  
  
  

Reply via email to