]> Dogcows Code - chaz/p5-CGI-Ex/blobdiff - samples/index.cgi
CGI::Ex 2.04
[chaz/p5-CGI-Ex] / samples / index.cgi
diff --git a/samples/index.cgi b/samples/index.cgi
new file mode 100755 (executable)
index 0000000..eb9a399
--- /dev/null
@@ -0,0 +1,105 @@
+#!/usr/bin/perl -w
+
+=head1 NAME
+
+index.cgi - Show a listing of available utilties in the samples directories.
+
+=cut
+
+use strict;
+use base qw(CGI::Ex::App);
+use FindBin qw($Bin);
+
+__PACKAGE__->navigate;
+
+sub main_file_print {
+    return \ q{<html>
+<head><title>CGI::Ex Samples</title></head>
+<body>
+<h1>CGI::Ex Samples</h1>
+Looking at directory: [% base %]<br>
+All of the samples in this directory should be ready to run.  To
+enable this directory you should use something similar to the following in your apache conf file:
+<pre>
+ScriptAlias /samples/ /home/pauls/perl/CGI-Ex/samples/
+&lt;Location /samples/>
+    SetHandler perl-script
+    PerlResponseHandler ModPerl::PerlRun
+    Options +ExecCGI
+&lt;/Location>
+</pre>
+For mod_perl 1 you would use something similar to:
+<pre>
+ScriptAlias /samples/ /home/pauls/perl/CGI-Ex/samples/
+&lt;Location /samples/>
+    SetHandler perl-script
+    PerlHandler Apache::PerlRun
+    Options +ExecCGI
+&lt;/Location>
+</pre>
+
+<h2>Application examples</h2>
+[% FOREACH file = app.keys.sort ~%]
+<a href="[% script_dir ~ file %]">[% script_dir ~ file %]</a> - [% app.$file %]<br>
+[% END -%]
+
+<h2>Benchmark stuff</h2>
+[% FOREACH file = bench.keys.sort ~%]
+[% file %] - [% bench.$file %]<br>
+[% END -%]
+
+<h2>Other files</h2>
+[% FOREACH file = therest.keys.sort ~%]
+[% file %] - [% therest.$file %]<br>
+[% END -%]
+
+</body>
+</html>
+    };
+}
+
+sub main_hash_swap {
+    my $self = shift;
+    my $base = $self->base_dir_abs;
+    my $hash = {};
+    my %file;
+
+    require File::Find;
+    File::Find::find(sub {
+        return if ! -f;
+        return if $File::Find::name =~ / CVS | ~$ | ^\# /x;
+        $File::Find::name =~ /^\Q$base\E(.+)/ || return;
+        my $name = $1;
+        my $desc = '';
+        if (open FH, "<$_") {
+            read FH, my $str, -s;
+            close FH;
+            if ($str =~ /^=head1 NAME\s+(.+)\s+^=cut\s+/m) {
+                $desc = $1;
+                $desc =~ s/^\w+(?:\.\w+)?\s+-\s+//;
+            }
+        }
+        $file{$name} = $desc;
+    }, $base);
+
+    $hash->{'base'}    = $base;
+
+    $hash->{'script_dir'} = $ENV{'SCRIPT_NAME'} || $0;
+    $hash->{'script_dir'} =~ s|/[^/]+$||;
+
+    $hash->{'app'}     = {map {$_ => $file{$_}} grep {/app/ && /\.cgi$/}    keys %file};
+
+    $hash->{'bench'}   = {map {$_ => $file{$_}} grep {/bench/ && /\.pl$/}   keys %file};
+
+    $hash->{'therest'} = {map {$_ => $file{$_}} grep {! exists $hash->{'bench'}->{$_}
+                                                      && ! exists $hash->{'app'}->{$_}} keys %file};
+
+    return $hash;
+}
+
+sub base_dir_abs {
+    my $dir = $0;
+    $dir =~ s|/[^/]+$||;
+    return $dir;
+}
+
This page took 0.027302 seconds and 4 git commands to generate.