#!/usr/bin/perl
package Catalyst::Plugin::Cache::Choose::KeyRegexes;
use strict;
use warnings;
use MRO::Compat;
sub setup {
my $app = shift;
my $ret = $app->maybe::next::method( @_ );
my $regexes = $app->_get_cache_plugin_config->{key_regexes} ||= [];
die "the regex list must be an array containing regexex/backend pairs" unless ref $regexes eq "ARRAY";
$ret;
}
sub get_cache_key_regexes {
my ( $c, %meta ) = @_;
@{ $c->_get_cache_plugin_config->{key_regexes} };
}
sub choose_cache_backend {
my ( $c, %meta ) = @_;
my @regexes = $c->get_cache_key_regexes( %meta );
while ( @regexes and my ( $re, $backend ) = splice( @regexes, 0, 2 ) ) {
return $backend if $meta{key} =~ $re;
}
$c->maybe::next::method( %meta );
}
__PACKAGE__;
__END__
=pod
=head1 NAME
Catalyst::Plugin::Cache::Choose::KeyRegex - Choose a cache backend based on key regexes.
=head1 SYNOPSIS
use Catalyst::Plugin::Cache::Choose::KeyRegex;
=head1 DESCRIPTION
=cut