Rob Hoelz
and 1 contributors

NAME

Template::Provider::PrefixDBIC - A template provider that uses DBIC for database access and exhibits fallback functionality

VERSION

version 0.01

SYNOPSIS

  use MySchema;
  use Template;
  use Template::Provider::PrefixDBIC;

  my $schema   = MySchema->connect(...);
  my $provider = Template::Provider::PrefixDBIC->new(
    RESULTSET => $schema->resultset(...),
    PREFIXES  => ['foo', 'default'],
  );

  my $template = Template->new({
    LOAD_TEMPLATES => [
        $provider,
    ],
  });

  $template->process('my_template'); # tries prefix = 'foo', name = 'my_template', then
                                     # prefix = 'default', name ='my_template'

DESCRIPTION

Template::Provider::PrefixDBIC combines the fallback functionality of Template::Provider along with the database access of Template::Provider::DBIC.

If you don't need the fallback functionality, I highly recommend the Template::Provider::DBIC module.

Because it makes use of the full name of the template, we don't extract a table name from the template name, and the SCHEMA option to the constructor is thus unsupported, unlike in Template::Provider::DBIC.

OPTIONS

In addition to the options provided by Template::Provider::DBIC (with the exception of SCHEMA), Template::Provider::PrefixDBIC also provides the following options:

COLUMN_PREFIX

The table column that contains the prefix for a template entry. This defaults to 'prefix'.

PREFIXES

The list of prefixes that will be used to look up a template. If a string is provided, it is converted to a single-element array reference. Defaults to [''].

METHODS

$self->prefixes

$self->prefixes($new_prefixes)

When called with no arguments, this method returns the list of prefixes that will be used to look up a template. When called with a $new_prefixes argument, the internal list is replaced with $new_prefixes. $new_prefixes is automatically converted to an array reference if it isn't one.

CAUTION

If your prefix + name combination does not fall under a unique constraint in your database, this module could encounter multiple results for any given prefix/name combination. This module does no extra work to disambiguate; it will simply pick the first one that your database would return from the SELECT, whatever that might be.

Also, this provider implementation doesn't do any caching. I wrote this module because we need to invoke certain templates based on which customer is accessing a resource, and fallback to a default if there is no customer-specific behavior. I'd rather not let caching leak customer details; maybe I'll add it in a later release.

SEE ALSO

Template, Template::Provider, Template::Provider::DBIC

AUTHOR

Rob Hoelz <rhoelz@inoc.com>

COPYRIGHT AND LICENSE

This software is copyright (c) 2011 by INOC.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.