Text::MicroMason::CompileCache - Use a Cache for Template Compilation


Text-MicroMason documentation Contained in the Text-MicroMason distribution.

Index


Code Index:

NAME

Top

Text::MicroMason::CompileCache - Use a Cache for Template Compilation

SYNOPSIS

Top

Instead of using this class directly, pass its name to be mixed in:

    use Text::MicroMason;
    my $mason = Text::MicroMason->new( -CompileCache );

Use the standard compile and execute methods to parse and evalute templates:

    print $mason->execute( text=>$template, 'name'=>'Dave' );

The template does not have to be parsed the second time because it's cached:

    print $mason->execute( text=>$template, 'name'=>'Bob' );

Templates stored in files are also cached, until the file changes:

    print $mason->execute( file=>"./greeting.msn", 'name'=>'Charles');




DESCRIPTION

Top

Public Methods

compile()

Caching wrapper around normal compile() behavior.

Supported Attributes

compile_cache_text

Defaults to an instance of Text::MicroMason::Cache::Simple. You may pass in your own cache object.

compile_cache_file

Defaults to an instance of Text::MicroMason::Cache::File. You may pass in your own cache object.

This module uses a simple cache interface that is widely supported: the only methods required are get($key) and set($key, $value). You can use the simple cache classes provided in the Text::MicroMason::Cache:: namespace, or select other caching modules on CPAN that support the interface described in Cache::Cache.

SEE ALSO

Top

For an overview of this templating framework, see Text::MicroMason.

This is a mixin class intended for use with Text::MicroMason::Base.

For distribution, installation, support, copyright and license information, see Text::MicroMason::Docs::ReadMe.


Text-MicroMason documentation Contained in the Text-MicroMason distribution.

package Text::MicroMason::CompileCache;

use strict;
use Carp;

require Text::MicroMason::Cache::Simple;
require Text::MicroMason::Cache::File;

######################################################################
# What cache class should we use for each src_type?

my %CACHE_CLASS = (
                   file => 'Text::MicroMason::Cache::File',
                   text => 'Text::MicroMason::Cache::Simple',
                  );

######################################################################

# $code_ref = compile( file => $filename );
sub compile {
    my $self = shift;
    my ( $src_type, $src_data, %options ) = @_;
    my $cache = $self->_compile_cache( $src_type )
        or return $self->NEXT('compile', @_);
    my $key = $self->cache_key(@_);
    $cache->get( $key ) or $cache->set( $key,
                                        $self->NEXT('compile', @_),
                                      );
}

sub _compile_cache {
    my ($self, $type) = @_;
    $CACHE_CLASS{$type} or return;
    
    $self->{compile_cache}{$type} ||= $CACHE_CLASS{$type}->new();
}

######################################################################


1;

__END__