Fixed uri handling
[catagits/Catalyst-Runtime.git] / lib / Catalyst / Engine / CGI.pm
index 0044681..409ce5a 100644 (file)
@@ -5,6 +5,22 @@ use base 'Catalyst::Engine::CGI::Base';
 
 use CGI;
 
+our @compile = qw[
+    delete
+    http
+    new_MultipartBuffer
+    param
+    parse_keywordlist
+    read_from_client
+    read_multipart
+    tmpFileName
+    uploadInfo
+    url_param
+    user_agent
+];
+
+CGI->compile(@compile);
+
 __PACKAGE__->mk_accessors('cgi');
 
 =head1 NAME
@@ -29,15 +45,7 @@ appropriate engine module.
 =head1 DESCRIPTION
 
 This is the Catalyst engine specialized for the CGI environment (using the
-C<CGI> and C<CGI::Cookie> modules).  Normally Catalyst will select the
-appropriate engine according to the environment that it detects, however you
-can force Catalyst to use the CGI engine by specifying the following in your
-application module:
-
-    use Catalyst qw(-Engine=CGI);
-
-The performance of this way of using Catalyst is not expected to be
-useful in production applications, but it may be helpful for development.
+C<CGI> and C<CGI::Cookie> modules).
 
 =head1 METHODS
 
@@ -100,9 +108,35 @@ sub prepare_parameters {
 =cut
 
 sub prepare_request {
-    my ( $c, $cgi ) = @_;
+    my ( $c, $object ) = @_;
+
+    my $cgi;
+
+    if ( defined($object) && ref($object) ) {
+
+        if ( $object->isa('Apache') ) {                   # MP 1.3
+            $cgi = CGI->new($object);
+        }
+
+        elsif ( $object->isa('Apache::RequestRec') ) {    # MP 1.99
+            $cgi = CGI->new($object);
+        }
+
+        elsif ( $object->isa('Apache2::RequestRec') ) {   # MP 2.00
+            $cgi = CGI->new($object);
+        }
+
+        elsif ( $object->isa('CGI') ) {
+            $cgi = $object;
+        }
+
+        else {
+            my $class = ref($object);
+            die( qq/Invalid argument $object/ );
+        }
+    }
+
     $c->cgi( $cgi || CGI->new );
-    $c->cgi->_reset_globals;
 }
 
 =item $c->prepare_uploads