NAME
Config::Structured - Provides generalized and structured configuration value access
VERSION
version 2.004
SYNOPSIS
Basic usage:
use Config::Structured;
my $conf = Config::Structured->new(
structure => { ... },
config => { ... }
);
say $conf->some->nested->value();
Hooks exammple showing how to ensure config directories exist prior to first use:
my $conf = Config::Structured->new(
...
hooks => {
'/paths/*' => {
on_load => sub($node,$value) {
Mojo::File->new($value)->make_path
}
}
}
)
DESCRIPTION
Config::Structured provides a structured method of accessing configuration values
This is predicated on the use of a configuration structure
(required), This structure provides a hierarchical structure of configuration branches and leaves. Each branch becomes a Config::Structured method which returns a new Config::Structured instance rooted at that node, while each leaf becomes a method which returns the configuration value.
The configuration value is normally provided in the config
hash. However, a config
node for a non-Hash value can be a hash containing the "source" and "ref" keys. This permits sourcing the config value from a file (when source="file") whose filesystem location is given in the "ref" value, or an environment variable (when source="env") whose name is given in the "ref" value.
Structure Leaf Nodes are required to include an "isa" key, whose value is a type (see Moose::Util::TypeConstraints). If typechecking is not required, use isa => 'Any'. There are a few other keys that Config::Structured respects in a leaf node:
default
-
This key's value is the default configuration value if a data source or value is not provided by the configuation.
description
notes
-
A human-readable description and implementation notes, respectively, of the configuration node. Config::Structured does not do anything with these values at present, but they provides inline documentation of configuration directivess within the structure (particularly useful in the common case where the structure is read from a file)
Besides structure
and config
, Config::Structured also accepts a hooks
argument at initialization time. This argument must be a HashRef whose keys are patterns matching config node paths, and whose values are HashRefs containing on_load
and/or on_access
keys. These in turn point to CodeRefs which are run when the config value is initially loaded, or every time it is accessed, respectively.
METHODS
get($name?)
Class method.
Returns a registered Config::Structured instance. If $name
is not provided, returns the default instance. Instances can be registered with __register_default
or __register_as
. This mechanism is used to provide global access to a configuration, even from code contexts that otherwise cannot share data.
__register_default()
Call on a Config::Structured instance to set the instance as the default.
__register_as($name)
Call on a Config::Structured instance to register the instance as the provided name.
__get_child_node_names()
Returns a list of names (strings) of all immediate child nodes of the current config node
AUTHOR
Mark Tyrrell <mtyrrell@concertpharma.com>
COPYRIGHT AND LICENSE
This software is Copyright (c) 2023 by Concert Pharmaceuticals, Inc.
This is free software, licensed under:
The MIT (X11) License