Acme-ReturnValue
view release on metacpan or search on metacpan
t/pms/RayApp.pm view on Meta::CPAN
package RayApp;
use strict;
use warnings;
use 5.008001;
$RayApp::VERSION = '2.004';
# print STDERR "RayApp version [$RayApp::VERSION]\n";
use URI::file ();
use XML::LibXML ();
use RayApp::UserAgent ();
# The constructor
sub new {
my $class = shift;
my $base = URI::file->cwd;
my %options;
my $ua_options = delete $options{ua_options};
my $ua = new RayApp::UserAgent(
defined($ua_options) ? %$ua_options : ()
);
my $self = bless {
%options,
base => $base,
ua => $ua,
}, $class;
return $self;
}
# Errstr is either a class or instance method
sub errstr {
my $self = shift;
my $errstr;
if (@_) {
if (defined $_[0]) {
$errstr = join ' ', @_;
chomp $errstr;
}
if (ref $self) {
$self->{errstr} = $errstr;
} else {
$RayApp::errstr = $errstr;
}
}
if (ref $self) {
return $self->{errstr};
} else {
return $RayApp::errstr;
}
}
sub clear_errstr {
shift->errstr(undef);
1;
}
sub base {
shift->{base};
}
# Loading content by URI
sub load_uri {
my ($self, $uri, %options) = @_;
$self->clear_errstr;
# rewrite the URI to the absolute one
$uri = URI->new_abs($uri, $self->{base});
# print STDERR "Loading $uri in pid $$\n";
# reuse cached file
my $cached = $self->{uris}{$uri};
if (defined $cached
and defined $cached->mtime
and $uri =~ m!^file:(//)?(/.*)$!) {
my $filename = $2;
my $cached_mtime = $cached->mtime;
my $current_mtime = (stat $filename)[9];
if ($cached_mtime == $current_mtime) {
# print STDERR " + Reusing $uri [$cached_mtime] [$current_mtime]\n";
return $cached;
}
( run in 2.247 seconds using v1.01-cache-2.11-cpan-0bb4e1dffa6 )