]> git.decadent.org.uk Git - maypole.git/blobdiff - lib/CGI/Maypole.pm
applied parse_path fix to CGI::Maypole
[maypole.git] / lib / CGI / Maypole.pm
index 27b74f261d4cf4bf20c1d1c01a0efe47c0d39dcc..df244326a4c6b497161c324678b27b6376aea0cc 100644 (file)
@@ -7,9 +7,9 @@ use CGI::Simple;
 use Maypole::Headers;
 use Maypole::Constants;
 
-our $VERSION = '2.10';
+our $VERSION = '2.11';
 
-__PACKAGE__->mk_accessors( qw( cgi ) );
+__PACKAGE__->mk_accessors( qw/cgi/ );
 
 =head1 NAME
 
@@ -76,17 +76,6 @@ sub get_request
     shift->cgi( CGI::Simple->new );
 }
 
-=item get_protocol
-
-=cut
-
-sub get_protocol 
-{
-  my $self = shift;
-  my $protocol = ($self->cgi->https) ? 'https' : 'http';
-  return $protocol;
-}
-
 =item parse_location
 
 =cut
@@ -108,7 +97,11 @@ sub parse_location
     {
         no warnings 'uninitialized';
         $path .= '/' if $path eq $loc;
-        $path =~ s/^($loc)?\///;
+       if ($loc =~ /\/$/) {
+         $path =~ s/^($loc)?//;
+       } else {
+         $path =~ s/^($loc)?\///;
+       }
     }
     $r->path($path);
     
@@ -116,6 +109,17 @@ sub parse_location
     $r->parse_args;
 }
 
+=item warn
+
+=cut
+
+sub warn {
+    my ($self,@args) = @_;
+    my ($package, $line) = (caller)[0,2];
+    warn "[$package line $line] ", @args ;
+    return;
+}
+
 =item parse_args
 
 =cut
@@ -150,7 +154,7 @@ sub redirect_request
       my $path = $args{path} || $r->cgi->url(-absolute => 1, -query=>1);
       my $host = $args{domain};
       ($host = $r->cgi->url(-base => 1)) =~ s/^https?:\/\///i unless ($host);
-      my $protocol = $args{protocol} || ($r->cgi->https()) ? 'https' : 'http';
+      my $protocol = $args{protocol} || $r->get_protocol;
       $redirect_url = "${protocol}://${host}/${path}";
     }
     $status = $args{status} if ($args{status});
@@ -162,14 +166,41 @@ sub redirect_request
   return;
 }
 
+=item get_protocol
+
+=cut
+
+sub get_protocol 
+{
+  my $self = shift;
+  my $protocol = ($self->cgi->https) ? 'https' : 'http';
+  return $protocol;
+}
+
 =item send_output
 
+Generates output (using C<collect_output>) and prints it. 
+
 =cut
 
 sub send_output 
 {
     my $r = shift;
+    print $r->collect_output;
+}
+
+=item collect_output
+
+Gathers headers and output together into a string and returns it.
 
+Splitting this code out of C<send_output> supports L<Maypole::HTTPD::Frontend>.
+
+=cut
+
+sub collect_output
+{
+    my $r = shift;
+    
     # Collect HTTP headers
     my %headers = (
         -type            => $r->content_type,
@@ -181,7 +212,7 @@ sub send_output
         $headers{"-$_"} = $r->headers_out->get($_);
     }
 
-    print $r->cgi->header(%headers), $r->output;
+    return $r->cgi->header(%headers) . $r->output;
 }
 
 =item get_template_root