File: CompileCache.pm

package info (click to toggle)
libtext-micromason-perl 2.10-1
  • links: PTS, VCS
  • area: main
  • in suites: squeeze
  • size: 648 kB
  • ctags: 196
  • sloc: perl: 3,192; makefile: 19
file content (113 lines) | stat: -rw-r--r-- 2,876 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
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__

=head1 NAME

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


=head1 SYNOPSIS

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');


=head1 DESCRIPTION


=head2 Public Methods

=over 4

=item compile()

Caching wrapper around normal compile() behavior.

=back

=head2 Supported Attributes

=over 4

=item compile_cache_text

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

=item compile_cache_file

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

=back

This module uses a simple cache interface that is widely supported: the
only methods required are C<get($key)> and C<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 L<Cache::Cache>.


=head1 SEE ALSO

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

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

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

=cut