Author: spadkins
Date: Sun Sep  3 18:57:14 2006
New Revision: 6837

Added:
   p5ee/trunk/App-Context/lib/Apache/App.pm

Log:
new

Added: p5ee/trunk/App-Context/lib/Apache/App.pm
==============================================================================
--- (empty file)
+++ p5ee/trunk/App-Context/lib/Apache/App.pm    Sun Sep  3 18:57:14 2006
@@ -0,0 +1,141 @@
+
+#############################################################################
+## $Id: App.pm 3666 2006-03-11 20:34:10Z spadkins $
+#############################################################################
+
+package Apache::App;
+$VERSION = (q$Revision: 3666 $ =~ /(\d[\d\.]*)/)[0];  # VERSION numbers 
generated by svn
+
+use Apache ();
+use App;
+
+my %env = %ENV;
+my $context;
+
+sub handler {
+    my $r = shift;
+
+    if ($ENV{PATH_INFO} eq "/_info") {
+        &info($r);
+        return;
+    }
+
+    my ($msg, $response);
+
+    # INITIALIZE THE CONTEXT THE FIRST TIME THIS APACHE CHILD PROCESS
+    # RECEIVES A REQUEST (should I do this sooner? at child init?)
+    # (so that the first request does not need to bear the extra burden)
+
+    # Also, the App class would cache the $context for me
+    # if I didn't want to cache it myself. But then I would have to 
+    # prepare the %options every request. hmmm...
+    # I don't suppose the $r->dir_config() call is expensive.
+
+    if (!defined $context) {
+        my %options = %{$r->dir_config()};
+        $options{context_class} = "App::Context::ModPerl" if (!defined 
$options{context_class});
+        eval {
+            $context = App->context(\%options);
+        };
+        $msg = $@ if ($@);
+    }
+
+    if ($ENV{PATH_INFO} eq "/_context") {
+        my $header = <<EOF;
+Content-type: text/plain
+
+App::Context::ModPerl - Context
+
+EOF
+        $r->print($header);
+        $r->print($context->dump());
+        return;
+    }
+    elsif ($ENV{PATH_INFO} eq "/_session") {
+        my $header = <<EOF;
+Content-type: text/plain
+
+App::Context::ModPerl - Session
+
+EOF
+        $r->print($header);
+        $r->print($context->{session}->dump());
+        return;
+    }
+    elsif ($ENV{PATH_INFO} eq "/_conf") {
+        my $header = <<EOF;
+Content-type: text/plain
+
+App::Context::ModPerl - Conf
+
+EOF
+        $r->print($header);
+        $r->print($context->{conf}->dump());
+        return;
+    }
+    elsif ($ENV{PATH_INFO} eq "/_options") {
+        my $header = <<EOF;
+Content-type: text/plain
+
+App::Context::ModPerl - Options
+
+EOF
+        $r->print($header);
+        my $options = $context->{options} || {};
+        foreach (sort keys %$options) {
+            $r->print("$key = $options->{$key}\n");
+        }
+        return;
+    }
+
+    # this should always be true
+    if (defined $context) {
+        # the response will be emitted from within dispatch_events()
+        $context->dispatch_events();
+    }
+    else {
+        # we had an error (maybe App-Context not installed? Perl @INC not set?)
+        $response = <<EOF;
+Content-type: text/plain
+
+Unable to create an App::Context.
+$msg
+
+EOF
+        $r->print($response);
+    }
+}
+
+sub info {
+    my $r = shift;
+    my $header = <<EOF;
+Content-type: text/plain
+
+Welcome to Apache::App
+
+EOF
+    $r->print($header);
+    print $r->as_string();
+    $r->print("\n");
+    $r->print("ENVIRONMENT VARIABLES\n");
+    $r->print("\n");
+    foreach my $var (sort keys %ENV) {
+        $r->print("$var=$ENV{$var}\n");
+    }
+    $r->print("\n");
+    $r->print("ENVIRONMENT VARIABLES (at startup)\n");
+    $r->print("\n");
+    foreach my $var (sort keys %env) {
+        $r->print("$var=$env{$var}\n");
+    }
+    $r->print("\n");
+    $r->print("DIRECTORY CONFIG\n");
+    $r->print("\n");
+    my %options = %{$r->dir_config()};
+    foreach my $var (sort keys %options) {
+        $r->print("$var=$options{$var}\n");
+    }
+}
+
+1;
+

Reply via email to