HTML-Mason
view release on metacpan or search on metacpan
lib/HTML/Mason/Interp.pm view on Meta::CPAN
if ( my $e = delete $self->{escape_flags} )
{
while ( my ($flag, $code) = each %$e )
{
$self->set_escape( $flag => $code );
}
}
}
sub _set_code_cache_attributes
{
my $self = shift;
$self->{unlimited_code_cache} = ($self->{code_cache_max_size} eq 'unlimited');
unless ($self->{unlimited_code_cache}) {
$self->{code_cache_min_size} = $self->{code_cache_max_size} * 0.75;
}
}
sub _preload_components
{
my $self = shift;
return unless $self->preloads;
foreach my $pattern (@{$self->preloads}) {
error "preload pattern '$pattern' must be an absolute path"
unless File::Spec->file_name_is_absolute($pattern);
my %path_hash;
foreach my $pair ($self->comp_root_array) {
my $root = $pair->[1];
foreach my $path ($self->resolver->glob_path($pattern, $root)) {
$path_hash{$path}++;
}
}
my @paths = keys(%path_hash);
warn "Didn't find any components for preload pattern '$pattern'"
unless @paths;
foreach (@paths)
{
$self->load($_)
or error "Cannot load component $_, found via pattern $pattern";
}
}
}
#
# Functions for retrieving and creating data subdirectories.
#
sub object_dir { my $self = shift; return $self->data_dir ? File::Spec->catdir( $self->data_dir, 'obj' ) : ''; }
sub object_create_marker_file { my $self = shift; return $self->object_dir ? File::Spec->catfile($self->object_dir, '.__obj_create_marker') : ''; }
sub cache_dir { my $self = shift; return $self->data_dir ? File::Spec->catdir( $self->data_dir, 'cache' ) : ''; }
sub _make_data_subdir
{
my ($self, $dir) = @_;
unless (-d $dir) {
my @newdirs = eval { mkpath( $dir, 0, 0775 ) };
if ($@) {
my $user = getpwuid($<);
my $group = getgrgid($();
my $data_dir = $self->data_dir;
error "Cannot create directory '$dir' ($@) for user '$user', group '$group'. " .
"Perhaps you need to create or set permissions on your data_dir ('$data_dir'). ";
}
$self->push_files_written(@newdirs);
}
}
sub _make_object_dir
{
my ($self) = @_;
my $object_dir = $self->object_dir;
$self->_make_data_subdir($object_dir);
my $object_create_marker_file = $self->object_create_marker_file;
unless (-f $object_create_marker_file) {
open my $fh, ">$object_create_marker_file"
or system_error "Could not create '$object_create_marker_file': $!";
$self->push_files_written($object_create_marker_file);
}
}
sub _make_cache_dir
{
my ($self) = @_;
my $cache_dir = $self->cache_dir;
$self->_make_data_subdir($cache_dir);
}
#
# exec is the initial entry point for executing a component
# in a new request.
#
sub exec {
my $self = shift;
my $comp = shift;
$self->make_request(comp=>$comp, args=>\@_)->exec;
}
sub make_request {
my $self = shift;
return $self->create_delayed_object( 'request', interp => $self, @_ );
}
sub comp_exists {
my ($self, $path) = @_;
return $self->resolve_comp_path_to_source($path);
}
#
# Load <$path> into a component, possibly parsing the source and/or
# caching the code. Returns a component object or undef if the
# component was not found.
#
sub load {
my ($self, $path) = @_;
my ($maxfilemod, $objfile, $objfilemod);
( run in 1.749 second using v1.01-cache-2.11-cpan-140bd7fdf52 )