Skip to content

kentnl/CHI-Config

Repository files navigation

NAME

CHI::Config - Define CHI configuration outside your code

VERSION

version 0.001002

SYNOPSIS

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

CONSTRUCTOR ARGUMENTS

config_paths

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.*

config_files

Optional: An ArrayRef of files to scan and load.

If specified, this list entirely overrules that provided by config_paths

defaults

Recommended: An ArrayRef of defaults in the same notation as the configuration spec.

defaults => [
     $entry,
     $entry,
     $entry,
],

See "ENTRIES"

METHODS

get_cache

Retrieve an instance of a cache object for consumption.

my $cache = $config->get_cache('myproject.myname');

$cache-># things with CHI

ENTRIES

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.

driver entry

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.

version entry

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

AUTHOR

Kent Fredric kentnl@cpan.org

COPYRIGHT AND LICENSE

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.

About

Define CHI configuration outside your code

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages