CHI::Config - Define CHI configuration outside your code
version 0.001002
use CHI::Config;
my $config = CHI::Config->new(
defaults => [
# Defaults indeed has to mimic the source file for future purposes
# ie: I plan to make some objects ( such as serializers )
# be configurable as well and they can't really be defined as-is in JSON
{
type => 'driver',
name => 'myproject.roflmayo',
config => {
# Arguments to CHI->new()
},
},
],
);
my $cache = $config->get_cache('myproject.roflmayo');
# Do stuff with $cache and get default behaviour
# User creates ~/.chi/config.json
[
{
'type' : 'driver',
'name' : 'myproject.roflmayo',
'config': {
# CHI CONFIG HERE
},
}
]
my $cache = $config->get_cache('myproject.roflmayo'); # Now gets user defined copy
Optional: An ArrayRef of path prefixes to scan and load.
For instance:
( config_paths => ['./foo'] )
Would automatically attempt to load any files called
foo.yml
foo.json
foo.ini
And load them with the relevant helpers.
See Config::Any
for details on this mechanism.
Paths will be interpreted in the order specified, with the first one
taking precedence over the latter ones for any given driver name,
with defaults
being taken only if they're needed.
Default paths loaded are as follows:
$ENV{CHI_CONFIG_DIR}/config.*
./chi_config.*
~/.chi/config.*
/etc/chi/config.*
Optional: An ArrayRef of files to scan and load.
If specified, this list entirely overrules that provided by
config_paths
Recommended: An ArrayRef of defaults in the same notation as the configuration spec.
defaults => [
$entry,
$entry,
$entry,
],
See "ENTRIES"
Retrieve an instance of a cache object for consumption.
my $cache = $config->get_cache('myproject.myname');
$cache-># things with CHI
Both the internal array based interface and the configuration file
are a list of Entries
. Design somewhat inspired by Config::MVP
's
sequence model, but much more lightweight.
These make up the core of a configuration.
{
type => 'driver',
# The following are all passed through to
# CHI::Config::Driver
# STRONGLY recommended
name => 'mynamespace.mycachename',
# RAW CHI arguments
config => {
%CONFIG #
},
# return singleton or new caches?
memoize => 0,
}
See CHI::Config::Driver
for details.
This is a mostly unnecessary element simply designed to give some kind of informal API in the event there are changes in how the configuration is parsed.
Currently, Spec version is == 0.1.0
{
type => 'version',
# Declare a minimum version of CHI::Config
min => 0.001000,
# Declare a maximum version of CHI::Config
max => 1.000000,
# Require exactly specification 0.1.0
spec => '0.1.0',
}
max
and min
give range controls on the version of CHI::Config
itself.
spec
gives an exact match on the interface provided by CHI::Config
, and is processed as an exact string match.
Any of the criteria not being satisfied will result in a croak
Kent Fredric kentnl@cpan.org
This software is copyright (c) 2014 by Kent Fredric kentfredric@gmail.com.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.