Apache2-ASP
view release on metacpan or search on metacpan
lib/Apache2/ASP/ASPPage.pm view on Meta::CPAN
package Apache2::ASP::ASPPage;
use strict;
use warnings 'all';
use Carp 'confess';
use base 'Apache2::ASP::HTTPHandler';
use vars __PACKAGE__->VARS;
use Apache2::ASP::ASPDOM::Node;
use Apache2::ASP::ASPDOM::Document;
use HTTP::Date 'time2iso';
use Scalar::Util 'weaken';
use Data::Dumper;
#==============================================================================
sub new
{
my ($class, %args) = @_;
$class->init_asp_objects( $class->context );
foreach(qw/ virtual_path /)
{
confess "Required param '$_' was not provided"
unless defined($args{$_});
}# end foreach()
# Just so we don't end up with an injection of some kind one day:
delete($args{file_contents});
my $s = bless \%args, $class;
$s->{physical_path} = $s->context->server->MapPath( $s->virtual_path );
confess "File not found: '@{[ $s->physical_path ]}'"
unless -f $s->physical_path;
my $pm_folder = $s->context->config->web->page_cache_root . '/' . $s->context->config->web->application_name;
# Build out the folder structure to the Page Cache:
my @parts = grep { length($_) } split /\//, $pm_folder;
my $dir = '';
foreach( @parts )
{
$dir .= "/$_";
mkdir($dir) unless -d $dir;
}# end foreach()
my $pkg = $s->virtual_path;
$pkg =~ s/^\///;
$pkg =~ s/[^a-z0-9_]/_/ig;
$s->{package_name} = $s->context->config->web->application_name . '::' . $pkg;
$s->{pm_path} = $pm_folder . '/' . $pkg . '.pm';
my $pm_inc = $s->context->config->web->application_name . '/' . $pkg . '.pm';
# Determine age of ASP and PM:
my $asp_age = (stat($s->context->server->MapPath($s->virtual_path)))[9];
no strict 'refs';
my $timestamp = ${$s->package_name . "::TIMESTAMP"} || 0;
my $pm_age = (stat($s->pm_path))[9] || 0;
if( ( ! $pm_age ) || ( $asp_age > $pm_age ) )
{
#warn "(Re)compiling $pkg";
delete( $INC{$pm_inc} );
$s->_init_source_code();
$s->parse;
require $pm_inc;
}
elsif( $asp_age > $timestamp )
{
#warn "(Re)loading $pkg";
delete( $INC{$pm_inc} );
( run in 2.227 seconds using v1.01-cache-2.11-cpan-39bf76dae61 )