NAME

Module::MultiConf - Configure and validate your app modules in one go

VERSION

This document refers to version 1.0401 of Module::MultiConf

SYNOPSIS

# first define the structure of your application configuration:

package MyApp::Config;
use Module::MultiConf;

__PACKAGE__->Validate({
    first_module  => { ... }, # a Params::Validate specification
    second_module => { ... }, # a Params::Validate specification
});

# make some module parameters "read-only"
__PACKAGE__->Force({
    first_module  => { var1 => 'val', var2 => 'val' },
});

# then use that to validate config passing through your app:

package MyApp::ComponentThingy;
use Another::Module;
use MyApp::Config;
 
sub new {
    my $class = shift;
    my $params = MyApp::Config->parse(@_);
        # @_ will be validated, and transferred to $params

    my $var1 = $params->myapp_componentthingy->{var1}; # gets a value
    my $var2 = $params->me->{var1}; # same thing, "me" aliases current package

    # you can update the contents of $params, and add new data
    $params->me->{new_cached_obj} =
       Another::Module->new( $params->another_module );
 
    return $class->SUPER::new($params);
};

# in addition, you can do things like this:

# override, or add to, the passed in parameters
my $params = MyApp::Config->parse(@_, {module => {foo => 12345}});
 
# load a bunch of default config from a file (using Config::Any)
    # and you can still add an override hashref, as in the above example.
my $params = MyApp::Config->parse('/path/to/some/file.yml');

DESCRIPTION

This module might help you to manage your application configuration, if most of the config is actually for other modules which you use. The idea here is that you store all that config in one place, probably an external file.

You can optionally use a validation specification, as described by Params::Validate, to check you are not missing anything when the config is loaded or passed around.

The interface to the stored config provides an object method per blob of configuration, which returns a reference to the hash of that blob's content.

You can load config using a filename parameter, which is passed to Config::Any, or a hash reference of hash references, each representing the config for one module. Each of these may be repeated as you like, with later items overriding earlier ones.

Be aware that Config::Any is called with the use_ext parameter, meaning you must use file extensions on your config files. I am sorry about having to do this, but it makes things just too unpredictable not to enable it.

Please refer to the bundled example files and tests for further details. It would also be worth reading the Params::Validate and Config::Any manual pages.

To have Params::Validate construct your mix of default and override options whilst not validating for missing options, load the module like so:

use MyApp::Config no_validation => 1;

SEE ALSO

http://jc.ngo.org.uk/blog/2007/01/15/perl-parameter-validation-and-error-handling/
Params::Validate
Params::Util
Config::Model

AUTHOR

Oliver Gorwits <oliver.gorwits@oucs.ox.ac.uk>

Tests were written by myself and Ray Miller.

COPYRIGHT & LICENSE

Copyright (c) The University of Oxford 2008.

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