The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Template::Plugin::DataHash - use INCLUDE_PATH to get confs with key fallback

OVERVIEW

Template::Plugin::DataHash provides a simple way to turn conf files, gathered from your INCLUDE_PATH into a single hash ref (no support for non hashes). I walk the INCLUDE_PATH, tack on the filename onto the end of each directory and this gives me the full_path of the file I will check. If the file exists, I run all the regexes in $self->{extension} (going in the order specified in $self->{extension_order}), to see which $type of conf I have, and then look for either a load_$type method or $self->{load_$type} (a CODE ref) and run the appropriate method. Each load_$type method takes a refence to $self and the full_path of the file, and returns a hash ref.

Two structures in the object help manage the process.

$self->{extension}

$self->{extension} contains a hash ref of regex objects that map a type (Storable for example) to a regex that gets run on the full_path of the file.

$self->{extension_order}

$self->{extension_order} contains a array ref specifying the order to check the extensions.

EXAMPLE

Let's say you have two conf files:

/tmp/default/conf.yaml

  key1: default1
  key2: default2

/tmp/override/conf.yaml

  key2: override2

In your template you could put

  [% USE dho = DataHash({INCLUDE_PATH => ['/tmp/override', '/tmp/default']}) %]
  [% hash = dho.hash('conf.yaml') %]

hash would then look like { key1 => 'default1', key2 => 'override2', }

By default, the INCLUDE_PATH comes from $template_object->{CONFIG}{INCLUDE_PATH}.

SUPPORTED EXTENSIONS

This is the set of default extension regexes

    extension => {
      perl     => qr/\.pl$/i,
      split    => qr/\.split$/i,
      storable => qr/\.sto$/i,
      xml      => qr/\.xml$/i,
      yaml     => qr/\.yaml$/i,
    },

The default extension order is

    extension_order => [qw(yaml perl storable xml split)],

ADDING YOUR OWN EXTENSION TYPES

If I have left out an extension that you feel others may be interested in, let me know and I can easily add new types. If you have a custom extension, you need to get the custom name into $self->{extension}, like

$self->{extension}{custom} = qr/\.custom$/;

then you can either do an overriding object, or specify the method in your object, like

$self->{load_custom} = sub { my $self = shift; my $full_path = shift; ... convert file to $ref in custom fashion ... return $ref };

AUTHOR

Copyright 2003, Earl J. Cahill. All rights reserved.

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

Address bug reports and comments to: cpan@spack.net.

When sending bug reports, please provide the version of Template::Plugin::DataHash, the version of Perl, and the name and version of the operating system you are using.