NAME
    Template::Provider::DBIC - Load templates using DBIx::Class

SYNOPSIS
        use My::DBIC::Schema;
        use Template;
        use Template::Provider::DBIC;

        my $schema = My::DBIC::Schema->connect(
            $dsn, $user, $password, \%options
        );
        my $resultset = $schema->resultset('Template');

    If all of your templates are stored in a single table the most
    convenient method is to pass the provider a DBIx::Class::ResultSet.

        my $template = Template->new({
            LOAD_TEMPLATES => [
                Template::Provider::DBIC->new({
                    RESULTSET => $resultset,
                    # Other template options like COMPILE_EXT...
                }),
            ],
        });

        # Process the template 'my_template' from resultset 'Template'.
        $template->process('my_template');
        # Process the template 'other_template' from resultset 'Template'.
        $template->process('other_template');

    Alternatively, where your templates are stored in several tables you can
    pass a DBIx::Class::Schema and specify the result set and template name
    in the form "ResultSet/template_name".

        my $template2 = Template->new({
            LOAD_TEMPLATES => [
                Template::Provider::DBIC->new({
                    SCHEMA => $schema,
                    # Other template options...
                }),
            ],
        });

        # Process the template 'my_template' from resultset 'Template'.
        $template->process('Template/my_template');
        # Process the template 'my_template' from resultset 'Other'.
        $template->process('Other/my_template');

    In cases where both are supplied, the more specific RESULTSET will take
    precedence.

DESCRIPTION
    Template::Provider::DBIC allows a Template object to fetch its data
    using DBIx::Class instead of, or in addition to, the default
    filesystem-based Template::Provider.

  SCHEMA
    This provider requires a schema containing at least the following:

    *   A column containing the template name. When
        "$template->provider($name)" is called the provider will search this
        column for the corresponding $name. For this reason the column must
        be a unique key, else an exception will be raised.

    *   A column containing the actual template content itself. This is what
        will be compiled and returned when the template is processed.

    *   A column containing the time the template was last modified. This
        must return - or be inflated to - a date string recognisable by
        Date::Parse.

  OPTIONS
    In addition to supplying a RESULTSET or SCHEMA and the standard
    Template::Provider options, you may set the following preferences:

    COLUMN_NAME
        The table column that contains the template name. This will default
        to 'name'.

    COLUMN_CONTENT
        The table column that contains the template data itself. This will
        default to 'content'.

    COLUMN_MODIFIED
        The table column that contains the date that the template was last
        modified. This will default to 'modified'.

METHODS
  ->fetch( $name )
    This method is called automatically during Template's "->process()" and
    returns a compiled template for the given $name, using the cache where
    possible.

USE WITH OTHER PROVIDERS
    By default Template::Provider::DBIC will raise an exception when it
    cannot find the named template. When TOLERANT is set to true it will
    defer processing to the next provider specified in LOAD_TEMPLATES where
    available. For example:

        my $template = Template->new({
            LOAD_TEMPLATES => [
                Template::Provider::DBIC->new({
                    RESULTSET => $resultset,
                    TOLERANT  => 1,
                }),
                Template::Provider->new({
                    INCLUDE_PATH => $path_to_templates,
                }),
            ],
        });

CACHING
    When caching is enabled, by setting COMPILE_DIR and/or COMPILE_EXT,
    Template::Provider::DBIC will create a directory consisting of the
    database DSN and table name. This should prevent conflicts with other
    databases and providers.

SEE ALSO
    Template, Template::Provider, DBIx::Class::Schema

DIAGNOSTICS
    In addition to errors raised by Template::Provider and DBIx::Class,
    Template::Provider::DBIC may generate the following error messages:

    "A valid DBIx::Class::Schema or ::ResultSet is required"
        One of the SCHEMA or RESULTSET configuration options *must* be
        provided.

    "%s not valid: must be of the form $table/$template"
        When using Template::Provider::DBIC with a DBIx::Class::Schema
        object, the template name passed to "->process()" must start with
        the name of the result set to search in.

    "'%s' is not a valid result set for the given schema"
        Couldn't find the result set %s in the given DBIx::Class::Schema
        object.

    "Could not retrieve '%s' from the result set '%s'"
        Unless TOLERANT is set to true failure to find a template with the
        given name will raise an exception.

DEPENDENCIES
    *   Carp

    *   Date::Parse

    *   File::Path

    *   File::Spec

    *   Template::Provider

    Additionally, use of this module requires an object of the class
    DBIx::Class::Schema or DBIx::Class::ResultSet.

BUGS
    Please report any bugs or feature requests to
    "bug-template-provider-dbic at rt.cpan.org", or through the web
    interface at
    <http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Template-Provider-DBIC>.

SUPPORT
    You can find documentation for this module with the perldoc command.

        perldoc Template::Provider::DBIC

    You may also look for information at:

    *   Template::Provider::DBIC

        <http://perlprogrammer.co.uk/modules/Template::Provider::DBIC/>

    *   AnnoCPAN: Annotated CPAN documentation

        <http://annocpan.org/dist/Template-Provider-DBIC/>

    *   RT: CPAN's request tracker

        <http://rt.cpan.org/NoAuth/Bugs.html?Dist=Template-Provider-DBIC>

    *   Search CPAN

        <http://search.cpan.org/dist/Template-Provider-DBIC/>

AUTHOR
    Dave Cardwell <dcardwell@cpan.org>

COPYRIGHT AND LICENSE
    Copyright (c) 2007 Dave Cardwell. All rights reserved.

    This module is free software; you can redistribute it and/or modify it
    under the same terms as Perl itself. See perlartistic.

